AngularJS ng-pattern在正则表达式中引发电话号码错误

时间:2014-10-23 20:26:43

标签: javascript regex angularjs ng-pattern

我在文本字段中使用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}$

这是有效的,所以不能动态创建字段,只与正则表达式相关。

1 个答案:

答案 0 :(得分:3)

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

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

版。区域代码(未经测试)的可选括号(实际括号):

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