Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无效的正则表达式组javascript_Regex_Forms_Angular - Fatal编程技术网

Regex 无效的正则表达式组javascript

Regex 无效的正则表达式组javascript,regex,forms,angular,Regex,Forms,Angular,我正在尝试使用以下正则表达式验证电话号码: \(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4}) 在angular 2 formbuilder Validator.pattern中,但我得到关于无效组的以下错误: 无效的正则表达式:/^(?(d{3}))?(d{3})(d{4})$/:无效组 我做错了什么?验证器。模式是JavaScript代码的一部分,它使用支持转义序列的字符串文字,如\n(LF-symbol)、\r(CR-symbol)等。因此,反斜杠不能与未知字符一

我正在尝试使用以下正则表达式验证电话号码:

\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})
在angular 2 formbuilder Validator.pattern中,但我得到关于无效组的以下错误:

无效的正则表达式:/^(?(d{3}))?(d{3})(d{4})$/:无效组


我做错了什么?

验证器。模式
是JavaScript代码的一部分,它使用支持转义序列的字符串文字,如
\n
(LF-symbol)、
\r
(CR-symbol)等。因此,反斜杠不能与未知字符一起使用,
“\d”
是未知转义序列,反斜杠被删除(这就是JavaScript作者决定处理这些场景的方式)

请注意,默认情况下,
验证器.pattern
中的所有字符串模式都是这样锚定的:
^
+
+
$
。因此,每当您的模式包含替换项时,请确保所有替换项都已分组(即不要使用
“az | bz”
,请使用
(?:az bz)
)。否则,请将正则表达式文字与锚点一起使用

因此,您所能做的就是使用双转义特殊字符:

"\\(?(\\d{3})\\)?[- ]?\\d{3}[- ]?\\d{4}"
或者,使用

/^\(?(\d{3})\)?[- ]?\d{3}[- ]?\d{4}$/

如果不使用反向引用,则在验证过程中捕获组是多余的。

是否将其作为字符串传递?如果是,则必须进行双转义。但您可以将其作为RegExp传递:
/^…$/
,因此您不需要对
\d
使用双转义。