有人可以告诉我为什么这个RegEx失败了吗? http://jsfiddle.net/SrKPG/
^(\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\-[0-9]+|)$
有趣的是 - 当我在http://jsregex.com/进行测试时,它有效。 但是在我的代码中它失败了。
答案 0 :(得分:3)
它失败了,因为你把它写成一个字符串,而没有转义\
。
你可以写
var regex = "^(\\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\\-[0-9]+|)$";
但是,您应该直接使用a regex literal而不是使用字符串和RegExp构造函数:
text.match(/^(\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\-[0-9]+|)$/g);
您还拒绝中间的0
,这不符合您的测试字符串。看来你想要的是
text.match(/^(\+[0-9]+ )[0-9]{2,} [0-9]{2,}(\-[0-9]+|)$/g);
答案 1 :(得分:3)
您未能匹配的原因是因为您的第二个数字序列不接受零:
^([+] [0-9] +) [1-9] {2,} [0-9] {2,}(\ - [0-9] + | )$
+43 660 1234556
答案 2 :(得分:2)
此致
"^(\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\-[0-9]+|)$"
正确
"^(\\+[0-9]+ )[1-9]{2,} [0-9]{2,}(-[0-9]+|)$"
双重转义是JavaScript字符串文字的要求。它与正则表达式无关。
在解析程序时,你的字符串文字在内存中变为"^(+[0-9]+ )[1-9]{2,} [0-9]{2,}(-[0-9]+|)$"
,因为\+
(相反,比方说,\n
)在JS字符串中没有任何意义。
此时正则表达式引擎抱怨单独的+
无效。
请注意, some-or-nothing (something|)
最好写成(something)?
。
除此之外:你不能使用正则表达式验证电话号码。
编辑:证据在评论中。 ;)