我在 AngularJS 网站上有一个用于澳大利亚电话号码验证的正则表达式。我在反应式表单验证器中设置了确切的模式,如下所示:
Validators.pattern(
'/^({0,1}((0|+61)(2|4|3|7|8))){0,1}( |-){0,1}[0-9]{2}( |-){0,1}[0-9]{2}( |-){0,1}[0-9]{1}( |-){0,1}[0-9]{3}$/'
)
该页面无法加载,因为出现以下错误:
无效的正则表达式:/^/^({0,1}((0|+61)(2|4|3|7|8))){0,1}( |-){0,1}[0 -9]{2}( |-){0,1}[0-9]{2}( |-){0,1}[0-9]{1}( |-){0,1}[ 0-9]{3}$/$/:没有可重复的内容
使用响应式表单时指定此模式的正确方法是什么?
有多个问题:
- 正则表达式文字不应在引号内使用(或使用带有双转义特殊字符的字符串模式)
- 特殊字符如
(
, )
and +
必须逃脱——没什么可重复的是由于以下事实造成的(
(捕获组的开始)量化为{0,1}
这是一个错误
-
{0,1}
等于?
, ( |-)
可以写成[ -]
, (2|4|3|7|8)
可以写得更短为[23478]
.
所以,你可以使用
Validators.pattern(
'^\\(?(0|\\+61)[24378]\\)?[ -]?[0-9]{2}[ -]?[0-9]{2}[ -]?[0-9][ -]?[0-9]{3}$'
)
请注意,您甚至可以省略^
and $
这里是因为 Angular 会自动将锚点添加到字符串模式中。
NOTE:如果分隔符应该一致,则捕获第一个分隔符,然后使用对组值的反向引用:
Validators.pattern(
'\\(?(?:0|\\+61)[24378]\\)?([ -]?)[0-9]{2}\\1[0-9]{2}\\1[0-9]\\1[0-9]{3}'
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)