我在AngularJS网站上有一个正在进行澳大利亚电话号码验证的正则表达式。我在Reactive Forms验证器中设置了确切的模式,如下所示:
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} $ / $ /:无需重复
使用Reactive Forms时指定此模式的正确方法是什么?
答案 0 :(得分:1)
有很多问题:
(
,)
和+
之类的特殊字符 - 无需重复是由(
(启动)引起的捕获组的数量用{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}$'
)
请注意,您甚至可以省略^
和$
,因为Angular会自动将锚点添加到字符串模式中。
注意:如果分隔符应该是一致的,则捕获第一个分隔符,然后使用反向引用到组值:
Validators.pattern(
'\\(?(?:0|\\+61)[24378]\\)?([ -]?)[0-9]{2}\\1[0-9]{2}\\1[0-9]\\1[0-9]{3}'
)
答案 1 :(得分:0)
将模式作为字符串传递,没有/哪个是正则表达式的分隔符
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}$/')