1

我在文本字段上使用 ng-pattern 来验证加拿大电话号码:

^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$

但是 AngularJS 会抛出这个错误:

语法错误:标记“?” 不是表达式 [^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$] 从 [?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$]。

我对其进行了测试,并在几个不同的在线正则表达式编辑器(如Rubular )中进行了尝试,它似乎完全有效。我正在动态创建字段,因此在 ngRepeat 中的指令中像这样设置 ng-pattern。

ng-pattern="{{field.format}}"

如果我将其更改为硬编码的正则表达式,它不会引发任何错误:

ng-pattern="/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"

但后来我把它改成了简单得可笑的东西:

^[0-9]{3}$

这有效,因此不能动态创建字段并且仅与正则表达式相关。

4

1 回答 1

3

你好。第一个?没有任何可以量化的东西。去掉它。这意味着您还应该删除由此产生的额外括号。

^([0-9]{3})?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$

埃德。对于区号(未经测试),带有可选括号(实际上是括号):

^(\(?([0-9]{3})\)?)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$

于 2014-10-23T20:34:42.970 回答