[英]AngularJS ng-pattern throws error on regex for phone number
我在文本字段上使用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-9]{3})?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
埃德。 使用区域代码的可选括号(实际括号)(未经测试):
^(\\(?([0-9]{3})\\)?)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.