Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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

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

Javascript 正则表达式有问题!

Javascript 正则表达式有问题!,javascript,regex,Javascript,Regex,我对电话号码的正则表达式使用了以下模式 pattern="[0-9 -+]+$"; 电话号码可能包含数字、连字符、空格和加号+。当我只使用数字时,它就起作用了。当使用数字和字母时,它不起作用 有什么问题,请务必告诉我 提前感谢它将-解释为范围的一部分。试试这个: pattern="^[0-9 +-]+$"; -或者需要转义\-或者像这样移动到结尾,谢谢Tim。它需要以^开头,而-需要以^转义\ pattern=/^[0-9 \-+]+$/; 它需要以“^”开头,因为它是字符串开头的锚点,如

我对电话号码的正则表达式使用了以下模式

pattern="[0-9 -+]+$";
电话号码可能包含数字、连字符、空格和加号+。当我只使用数字时,它就起作用了。当使用数字和字母时,它不起作用

有什么问题,请务必告诉我


提前感谢

它将-解释为范围的一部分。试试这个:

pattern="^[0-9 +-]+$";

-或者需要转义\-或者像这样移动到结尾,谢谢Tim。

它需要以^开头,而-需要以^转义\

pattern=/^[0-9 \-+]+$/;

它需要以“^”开头,因为它是字符串开头的锚点,如果没有,它将验证以任何内容开头的字符串,只要它们以数字、空格、-或结尾+

-需要转义,因为它是一个特殊字符,并且具有除-以外的含义。而+是一个特殊字符,如果要将其视为类外的+,则需要对其进行转义,而仅在类内]^-\则需要进行转义

所以在课堂外逃跑

.^$|*+?()[{\
和内部逃生:

]^-\
但是,大多数实现允许您在类中转义所有12个特殊字符而不会出错,并且只有在转义非特殊字符时,它们才会给出一个错误,这意味着加号之前的额外\也可以正常工作

pattern="^[0-9 \-\+]+$"
我总是发现使用使事情变得更容易,因为它允许我看到错误。

因为-dash被用作regexp中括号内的范围符号,所以您需要将其转义,或者将其放在最后:

pattern="[0-9 \-+]+$";
// or
pattern="[0-9 +-]+$";
您可能还希望以“^”开头regexp,以确保整个字符串与之匹配,而不仅仅是结尾:

pattern="^[0-9 +-]+$";

您的正则表达式将失败,即使在进行David建议的更正之后。因为它匹配一个或多个数字和+,-的任意组合。例如,它匹配99++++-12

这里有一个更好的版本,它将999-999-9999格式的数字与+9999格式的可选国家代码(两到四位数)匹配

(\+\d{2,4}\s*)?(\d{3})-(\d{3})-(\d{4})

那么9++23++-13是一个有效的电话号码吗?我对答案做了一点编辑:如果你把+放在字符类的开头或结尾,“-也不需要转义”。@Fabien:\s也包含制表符。@Tim:yep,\s应该是,对不起。除非你把连字符放在奇数的地方,否则这与英国号码不匹配。例如,伦敦号码的正确国际格式为+44 20 xxxx xxxx。匹配所有地区在印度是一项困难的任务,它是+91\d{10}-这就是为什么我特别说它匹配3+3+4个号码。我只是指出[0-9+-]模式的错误。