我在文本字段上使用 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}$
这有效,因此不能动态创建字段并且仅与正则表达式相关。