Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex_Spring_Forms - Fatal编程技术网

如何使javascript只接受给定的正则表达式?

如何使javascript只接受给定的正则表达式?,javascript,regex,spring,forms,Javascript,Regex,Spring,Forms,我试图用javascript创建一个表单来注册用户,其中一个字段是电话号码 我有几个电话号码必须遵循的模式 它必须包含一个“+”后跟一个从1到999的数字,然后是“(“然后是一个从1到999的数字”)”以及至少4个从0到9的数字 或 一个“+”后跟一个从1到999的数字,然后是至少4个从0到9的数字 或 0到9之间至少有4位数字 您可以将任何电话号码保存在表单中,但如果您介绍的电话号码与这些模式不同,则应显示一条消息来警告您(警告部分起作用) 这是我制作的javascript函数 <scr

我试图用javascript创建一个表单来注册用户,其中一个字段是电话号码

我有几个电话号码必须遵循的模式

它必须包含一个“+”后跟一个从1到999的数字,然后是“(“然后是一个从1到999的数字”)”以及至少4个从0到9的数字

一个“+”后跟一个从1到999的数字,然后是至少4个从0到9的数字

0到9之间至少有4位数字

您可以将任何电话号码保存在表单中,但如果您介绍的电话号码与这些模式不同,则应显示一条消息来警告您(警告部分起作用)

这是我制作的javascript函数

<script type="text/javascript">
    function checkPhone() {
        var numberPattern1 = new RegExp("\\+[0-9]{1,3}[0-9]{4,}");
        var numberPattern2 = new RegExp("\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}");
        var numberPattern3 = new RegExp("[0-9]{4,}");
        var phone = document.getElementById("phone");
        var test1 = numberPattern1.test(phone.value);
        var test2 = numberPattern2.test(phone.value);
        var test3 = numberPattern3.test(phone.value);
        var match = test1 || test2 || test3;
        if (!match) {
            var test = alert("<spring:message code = 'number.dont.match'/>");
        }
    }
</script>
并用如下字符串发出警告

456
fsdfsdfhge
+0(0)4567
+65(4956)3456
问题是,当我输入这样的内容时,它并没有警告我

+1234 //(it should have at least one more digit)
++1245
+65(4956)3456 //(Can't have more than 3 numbers in the parenthesis)
+0(0)4567 //(the number after the "+" and from the parenthesis must be at least 1)
aaaaaaaaaa8888aaaaaaaaaa
aaaaa+45(867)86543
jguosfoafos+339999oiajdiajdsi
它看起来像是匹配任何字符串,只要它有4个数字在一起,就像最后一个模式,我认为问题是由于正则表达式,但我不太确定。
如果整个字符串与模式不匹配,我应该怎么做才能得到警告?

正则表达式测试函数尝试在给定字符串中查找正则表达式模式,它可能是子字符串。要匹配整个字符串,可以在正则表达式的开头和结尾指定开始(“^”)和结束(“$”)字符

所以你的模式应该是

"^\\+[0-9]{1,3}[0-9]{4,}$"
"^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$"
"^[0-9]{4,}$"

参考

正则表达式测试函数尝试在给定字符串中查找正则表达式模式,它可能是子字符串。要匹配整个字符串,可以在正则表达式的开头和结尾指定开始(“^”)和结束(“$”)字符

所以你的模式应该是

"^\\+[0-9]{1,3}[0-9]{4,}$"
"^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$"
"^[0-9]{4,}$"

请参阅使用
^
$
调整正则表达式以说明字符串的开始和结束:

function checkPhone() {
    var numberPattern1 = new RegExp("^\\+[0-9]{1,3}[0-9]{4,}$");
    var numberPattern2 = new RegExp("^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$");
    var numberPattern3 = new RegExp("^[0-9]{4,}$");
    var phone = document.getElementById("phone");
    var test1 = numberPattern1.test(phone.value);
    var test2 = numberPattern2.test(phone.value);
    var test3 = numberPattern3.test(phone.value);
    var match = test1 || test2 || test3;
    if (!match) {
        var test = alert("<spring:message code = 'number.dont.match'/>");
    }
}
功能检查电话(){
var numberPattern1=newregexp(“^\\+[0-9]{1,3}[0-9]{4,}$”;
var numberPattern2=newregexp(“^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$”;
var numberPattern3=newregexp(“^[0-9]{4,}$”;
var phone=document.getElementById(“电话”);
var test1=numberPattern1.test(phone.value);
var test2=numberPattern2.test(phone.value);
var test3=numberPattern3.test(phone.value);
var match=test1 | | test2 | | test3;
如果(!匹配){
var测试=警报(“”);
}
}

例子:
功能检查电话(电话){
var numberPattern1=newregexp(“^\\+[0-9]{1,3}[0-9]{4,}$”;
var numberPattern2=newregexp(“^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$”;
var numberPattern3=newregexp(“^[0-9]{4,}$”;
var test1=numberPattern1.test(电话);
var test2=numberPattern2.test(电话);
var test3=numberPattern3.test(电话);
var match=test1 | | test2 | | test3;
如果(!匹配){
var测试=警报(“”);
}
}

支票电话(“+1234”)使用
^
$
调整正则表达式以说明字符串的开始和结束:

function checkPhone() {
    var numberPattern1 = new RegExp("^\\+[0-9]{1,3}[0-9]{4,}$");
    var numberPattern2 = new RegExp("^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$");
    var numberPattern3 = new RegExp("^[0-9]{4,}$");
    var phone = document.getElementById("phone");
    var test1 = numberPattern1.test(phone.value);
    var test2 = numberPattern2.test(phone.value);
    var test3 = numberPattern3.test(phone.value);
    var match = test1 || test2 || test3;
    if (!match) {
        var test = alert("<spring:message code = 'number.dont.match'/>");
    }
}
功能检查电话(){
var numberPattern1=newregexp(“^\\+[0-9]{1,3}[0-9]{4,}$”;
var numberPattern2=newregexp(“^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$”;
var numberPattern3=newregexp(“^[0-9]{4,}$”;
var phone=document.getElementById(“电话”);
var test1=numberPattern1.test(phone.value);
var test2=numberPattern2.test(phone.value);
var test3=numberPattern3.test(phone.value);
var match=test1 | | test2 | | test3;
如果(!匹配){
var测试=警报(“”);
}
}

例子:
功能检查电话(电话){
var numberPattern1=newregexp(“^\\+[0-9]{1,3}[0-9]{4,}$”;
var numberPattern2=newregexp(“^\\+[0-9]{1,3}\\([0-9]{1,3}\\)[0-9]{4,}$”;
var numberPattern3=newregexp(“^[0-9]{4,}$”;
var test1=numberPattern1.test(电话);
var test2=numberPattern2.test(电话);
var test3=numberPattern3.test(电话);
var match=test1 | | test2 | | test3;
如果(!匹配){
var测试=警报(“”);
}
}

支票电话(“+1234”)
@rayo329:这是匹配的
+0000000000000000
000000000000000000
+0(0)0000000000000000000000
@Toto-right,但正则表达式声明这样做。如果OP的长度有问题,那么它们的结尾就不是
{4,}
OP说:“它必须包含一个“+”后跟一个从1到999的数字,然后(“然后是一个从1到999的数字”)”,第一个数字不应该是
0
@Toto我明白你的意思了,很遗憾,我无法删除此答案,但我将稍后尝试更新它。令人惊讶的是,OP没有指出它是一个注释。@rayo329:这是匹配的
+0000000000000000
000000000000000000
+0(0)0000000000000000000000
@Toto对,但正则表达式声明这样做。如果OP的长度有问题,那么它们的结尾就不是
{4,}
OP说:“它必须包含一个“+”后跟一个从1到999的数字,然后(“然后是一个从1到999的数字”)”,第一个数字不应该是
0
@Toto我明白你的意思了,很遗憾,我无法删除此答案,但我将稍后尝试更新它。令人惊讶的是,OP没有指出这是一个评论。