0

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

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

有趣的是 - 当我在http://jsregex.com/测试它时,它可以工作。但在我的代码中它失败了。

4

3 回答 3

3

它失败了,因为你把它写成一个字符串,没有转义\.

你可以写

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);
于 2013-10-09T12:05:46.893 回答
3

你的

    "^(\+[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)?.


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

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

于 2013-10-09T12:09:34.137 回答
3

您无法匹配的原因是您的第二个数字序列不接受零:

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

+43 660 1234556

于 2013-10-09T12:16:49.030 回答