Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 输入改变文本框格式_Javascript_String_Function_Validation_Format - Fatal编程技术网

Javascript 输入改变文本框格式

Javascript 输入改变文本框格式,javascript,string,function,validation,format,Javascript,String,Function,Validation,Format,我是JavaScript新手,我一直在做一些用HTML和JavaScript创建表单的工作。在这项工作中,我一直试图验证输入的格式,这取决于输入到前一个字段中的文本 我一直在尝试的是,如果在“国家”文本框中输入国家“澳大利亚”,则“电话”文本框的格式限制为(00)00000000,如果是“电话”文本框以外的任何其他国家,则必须以国际号码方式格式化,包括+和国家代码,例如+61等 到目前为止,我已经完成了很多功能: <script> document.getElementById('t

我是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>

document.getElementById('txttelephone')。onchange=function()
{
var num1=document.getElementById('txttelephone')。值,
country=document.getElementById('txtcountry')。值,
正则表达式;
如果(国家==“澳大利亚”|国家==“澳大利亚”)
{
正则表达式=/\(\d{2}\)\d{8}/;
}
其他的
{
正则表达式=/\+\d{15}/;
}
如果(!num1.match(regex))
{
警报(“这不是正确的电话号码”);
}
}
这正是我所做的将“电话”文本框的字符串长度限制为12个字符的功能,但我仍然需要验证,以确保区号以(00)00000000的形式包含在括号中,如果国家不是澳大利亚,还需要验证a+是否包含在括号中(国际编号包括国家代码)

以下是我必须在其上使用函数的HTML:

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

电话:
非常感谢您的帮助!

您需要的是测试电话号码是否符合您想要的格式

这里是一个澳大利亚数字
/\(\d{2}\)\d{8}/
。一个正则表达式以
/
开始和结束,然后它将匹配一个开始括号
\(
后跟两个数字
\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!");
    }
}

作为补充说明,我强烈建议您不要让用户“免费”输入他们的国家,因为任何输入错误都意味着您的逻辑将不起作用,即您需要用户进入澳大利亚或澳大利亚,其他什么都不行,下拉框是为这种情况而发明的:)。

尝试类似的方法。它没有经过测试,因此正则表达式可能并不完全正确,但至少应该有帮助:

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所建议的,我将使用下拉列表而不是文本字段作为国家名称。输入错误不仅会破坏您的逻辑,而且如果用户留下一个输入错误,并且您需要搜索所有国家/地区为“Australia”的用户,您可能会错过输入错误的用户。

查看+1,以建议使用下拉列表作为国家/地区名称。我在阅读问题时想到了这一点,但忘了把它放在我的答案中。是的,我还考虑过使用下拉列表来考虑打字错误。另外,我的javascript似乎不起作用,我已经在我的原始帖子中对其进行了更新,以便您可以找到我的错误。顺便谢谢你的帮助@user2244784抱歉,这是我的错误,因为我修改了你的函数,它现在应该在电话字段的onchange事件上运行。请在我的答案中看到修改后的代码,然后再试一次:)没关系!我已经对我的函数进行了更改,但它似乎仍然不起作用,当我在“国家”字段中输入“澳大利亚”时,它仍然允许我在“电话”字段中输入无限数量的字符,并且不验证是否包含括号:/That's奇怪-看看这里-并测试我的代码版本