有人可以告诉我为什么这个 RegEx 失败了吗? http://jsfiddle.net/SrKPG/
^(\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\-[0-9]+|)$
有趣的是 - 当我在http://jsregex.com/测试它时,它可以工作。但在我的代码中它失败了。
有人可以告诉我为什么这个 RegEx 失败了吗? http://jsfiddle.net/SrKPG/
^(\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\-[0-9]+|)$
有趣的是 - 当我在http://jsregex.com/测试它时,它可以工作。但在我的代码中它失败了。
它失败了,因为你把它写成一个字符串,没有转义\
.
你可以写
var regex = "^(\\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\\-[0-9]+|)$";
但是,您应该直接使用正则表达式文字,而不是使用字符串和 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);
你的
"^(\+[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 字符串中没有任何意义。
此时正则表达式引擎抱怨孤单+
无所事事。
请注意,“有或无 (something|)
”最好写成(something)?
.
除此之外:您不得使用正则表达式来验证电话号码。
编辑:证据在评论中。;)
您无法匹配的原因是您的第二个数字序列不接受零:
^([+][0-9]+ ) [1-9]{2,} [0-9]{2,}(\-[0-9]+|)$
+43 660 1234556