javascript - AngularJS ng-pattern 在电话号码的正则表达式上抛出错误

标签 javascript regex angularjs ng-pattern

我在文本字段上使用 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/

相关文章:

Python删除源中的某些元素

javascript 将数组与对象数组进行比较

javascript - 带有 Angular ui-router 的多个可选参数

angularjs - 如何在 Angular 中使用 {N} 个应用程序生命周期事件?

javascript - Meteor simple todos server/main.js 和 client/main.js 有什么区别?

javascript - 在 Elasticsearch 中,是否可以对索引执行临时 POST?

正则表达式,除空格或冒号之外的每个非字母数字字符

regex - 如果字符串中的任何内容与模式检查的内容不同,则正则表达式返回 false

javascript - Jquery .delay().fadeOut 取消/清除队列..可能吗?如何?

javascript - 如何使用 Node.js 正确提供私有(private)静态文件?