我正在尝试使用这个正则表达式验证电话号码:
\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})
在Angular 2中使用FormBuilder的Validator.pattern时,我遇到了关于无效组的错误:
无效的正则表达式:/^(?(d{3}))?(d{3})(d{4})$/: 无效的组
我做错了什么?
Validator.pattern
是 JavaScript 代码的一部分,支持转义序列(例如 LF 符号 \n
、CR 符号 \r
等)的字符串字面量。因此,反斜杠无法与一个未知字符一起使用,"\d"
就是一个未知的转义序列,所以反斜杠会被移除(这就是 JavaScript 作者决定解决这些情况的方式)。
请注意,默认情况下,Validators.pattern
中的所有字符串模式都是锚定的,格式如下:^
+ <provided_pattern>
+ $
。因此,如果您的模式包含交替项,请确保所有的交替项都被分组(即不要使用 "az|bz"
,而要使用 (?:az|bz)
)。否则,请使用带有锚点的正则表达式。
因此,您可以做的是对特殊字符进行双重转义:
"\\(?(\\d{3})\\)?[- ]?\\d{3}[- ]?\\d{4}"
/^\(?(\d{3})\)?[- ]?\d{3}[- ]?\d{4}$/
如果您没有使用反向引用,那么在验证过程中捕获组是多余的。
/^...$/
,因此你不需要为\d
使用双重转义。 - developer033