Angular Reactive Forms 模式验证:正则表达式无效

2024-04-25

我在 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(使用前将#替换为@)

Angular Reactive Forms 模式验证:正则表达式无效 的相关文章

随机推荐