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
使用双转义。