RegEx语法错误 - 无需重复

时间:2013-10-09 12:04:02

标签: javascript regex

有人可以告诉我为什么这个RegEx失败了吗? http://jsfiddle.net/SrKPG/

^(\+[0-9]+ )[1-9]{2,} [0-9]{2,}(\-[0-9]+|)$

有趣的是 - 当我在http://jsregex.com/进行测试时,它有效。 但是在我的代码中它失败了。

3 个答案:

答案 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)?


除此之外:你不能使用正则表达式验证电话号码。

编辑:证据在评论中。 ;)