0

我是 JavaScript 新手,我一直在做一些工作,用 HTML 和 JavaScript 创建表单。在这项工作中,我一直在尝试根据输入到前一个字段中的文本来验证输入的格式。

我一直在尝试的是,如果在“国家/地区”文本框中输入国家“澳大利亚”而不是“电话”文本框仅限于格式 (00)00000000,并且如果它是“电话”文本以外的任何其他国家/地区框必须以国际号码方式格式化,包括+和国家代码,例如+61等

到目前为止,我已经完成了这么多的功能:

<script>
document.getElementById('txttelephone').onchange = function()
{
var num1 = document.getElementById('txttelephone').value,
    country = document.getElementById('txtcountry').value,
    regex;

if (country == "Australia" || country == "australia")
{
    regex = /\(\d{2}\)\d{8}/;
}
else
{
    regex = /\+\d{15}/;
}
if (!num1.match(regex))
{
    alert('That is not a correct telephone number');
}
}
</script>

这只是我将“电话”文本框的字符串长度限制为 12 个字符的功能,但我还没有验证以确保区号以 (00)00000000 的形式包含在括号之间如果国家不是澳大利亚(包括国家代码在内的国际号码),还要验证是否包含 +。

这是我必须使用该功能的 HTML:

<b>Country:</b> <input type="text" id="txtcountry" name="country">
<br>
<b>Telephone:</b> <input type="text" id="txttelephone" name="telephone">

任何帮助将不胜感激!

4

2 回答 2

1

您需要的是一个正则表达式来测试电话号码是否与您想要的格式匹配。

这是澳大利亚数字的一个/\(\d{2}\)\d{8}/。正则表达式以 then 开头和结尾,/它将匹配一个左括号,\(后跟两个数字\d{2},一个右括号\)和 8 个 nore 数字\d{8}

所以你的功能可以变成这个

//changed to onchange event of `txttelephone`
 document.getElementById('txttelephone').onchange = function(){  
     var num1 = document.getElementById('txttelephone').value,  //added .value here
        country = document.getElementById('txtcountry').value,
        regex;
    if(country == "Australia" || country == "australia"){
       regex = /\(\d{2}\)\d{8}/;
    } else {
       regex = /\+\d{15}/;        
    }

    if(!num1.match(regex)){   //If there was not a match for your number format
       alert("thats not a ruddy telephone number!");
    }
}

作为旁注,我强烈敦促您不要让用户“免费”输入他们的国家/地区,因为任何拼写错误都意味着您的逻辑将不起作用,即您需要用户进入澳大利亚或澳大利亚,而其他任何事情都不会做,为此发明了下拉菜单设想 :)。

于 2013-04-05T14:16:55.870 回答
0

尝试这样的事情。它没有经过测试,因此正则表达式可能并不完全正确,但它至少应该有所帮助:

document.getElementById('myform').onsubmit = function(event) {
    var country = document.getElementById('txtcountry').value;
    var regex = /^\+\d{1,2}\(\d{2,3}\)\d{7,8}$/;
    if (country.toLowerCase() == 'australia') {
         // make the international code optional
        regex = /^(\+\d{1,2})?\(\d{2,3}\)\d{7,8}$/;
    }

    var phone = document.getElementById('txttelephone').value;
    if (!phone.test(regex)) {
        event.preventDefault();
        alert('Bad phone number!');
        return false;
    }
};

这将在他们尝试提交表单时检查该值。如果他们给出了错误的值,它将显示一条错误消息并阻止提交。

此外,正如@MarkWalters 建议的那样,我会使用下拉列表而不是国家名称的文本字段。拼写错误不仅会破坏您的逻辑,而且如果用户留下拼写错误并且您需要搜索国家为“澳大利亚”的所有用户,您可能会错过输入错误的用户。

于 2013-04-05T14:21:53.453 回答