我在文本字段上使用 ng-pattern 来验证加拿大电话号码:
^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
但是 AngularJS 抛出这个错误:
Syntax Error: Token '?' not a primary expression at column 3 of the expression [^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$] starting at [?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$].
我对其进行了测试,并在几个不同的在线正则表达式编辑器中进行了尝试,例如 Rubular , 它似乎完全有效。我正在动态创建字段,因此 ng-pattern 在 ngRepeat 的指令中设置为这样。
ng-pattern="{{field.format}}"
如果我将它更改为硬编码的正则表达式,它不会抛出任何错误:
ng-pattern="/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
但后来我把它改成了非常简单的东西:
^[0-9]{3}$
这行得通,所以不能动态创建字段并仅与正则表达式相关。
最佳答案
你好。第一个 ?
没有任何可量化的内容。去掉它。这意味着您还应该删除由此产生的额外括号。
^([0-9]{3})?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
埃德。带有区号的可选括号(实际上是括号)(未测试):
^(\(?([0-9]{3})\)?)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
关于javascript - AngularJS ng-pattern 在电话号码的正则表达式上抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536793/