我在文本字段中使用ng-pattern来验证加拿大电话号码:
^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
但是AngularJS抛出了这个错误:
语法错误:令牌'?'不是表达式[^(?([0-9] {3}))的第3列的主要表达式?[ - 。 ]([0-9] {3})[? - 。 ]?([0-9] {4})$]从[?([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 :(得分:3)
的Bonjour。第一个?
没有任何可量化的东西。去掉它。这意味着您还应该删除生成的额外括号。
^([0-9]{3})?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
版。区域代码(未经测试)的可选括号(实际括号):
^(\(?([0-9]{3})\)?)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$