1

我在javascript中有以下正则表达式

var reg = new RegExp("^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$");
return this.optional(element) || (reg.test(value));

在我的代码 reg.test(value) 中,即使在正确的值上也返回 false:例如 222 222 2222 或 222-222-2222。所有的正则表达式测试器(尤其是这个,它调用相同的方法)显示正则表达式匹配表达式。可能是什么问题?

4

4 回答 4

8

尝试这个:

var reg = /^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$/;
return this.optional(element) || (reg.test(value));

或者还有:

var reg = new RegExp("^[(]?[2-9]\\d{2}[)]?[\\-. :]?[2-9]\\d{2}[\\-. :]?\\d{4}$");
return this.optional(element) || (reg.test(value));
于 2012-06-01T21:26:06.253 回答
4

\s 被字符串文字吞噬。

您应该改用正则表达式文字:

var reg = /^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$/;
于 2012-06-01T21:25:56.270 回答
2

我看到了一个潜在的麻烦原因:如果您正在使用该RegExp函数创建一个新的正则表达式,则必须两次转义反斜杠 - 一次用于 JavaScript 引擎,一次用于 RegEx 引擎。

您可以通过以下方式测试这是否会导致麻烦

var reg = /^[(]?[2-9]\d{2}[)]?[\-. :]?[2-9]\d{2}[\-. :]?\d{4}$/;
于 2012-06-01T21:26:51.600 回答
1

您将正则表达式作为字符串输入,所以所有出现的\d应该是\\d因为当正则表达式字符串被发送到解释器时,\d字符不会被解释为 a\和 ad而只是d添加额外的斜杠会转义另一个斜杠所以\\d是解释为 a\和 a d。我还建议进行另一项更改,[(]应将其替换为,\\(因为字符类仅包含一个字符,因此没有意义。

于 2012-06-01T23:44:13.943 回答