有效的正则表达式不适用于 AngularJS

Valid regex expressions won't work with AngularJS

我想检查用户输入的 phone 两种格式的数字是否正确:

我为此写了一个正则表达式 [0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3}|[0-9]{2} [0-9]{7}|。它在使用在线正则表达式检查器检查时有效,但在与 AngularJS 一起使用时无效(用户可以编写他们想要的任何内容):ng-pattern="[0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3}|[0-9]{2} [0-9]{7}|".

您需要定义一个正则表达式来匹配与您的模式匹配的整个字符串作为可选模式:

ng-pattern="/^(?:\+[0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3}|[0-9]{2} [0-9]{7})?$/"
            ^^                                                           ^^

或者,更短一点:

ng-pattern="/^(?:\+[0-9]{2}(?: [0-9]{3}){3}|[0-9]{2} [0-9]{7})?$/"

如果您将 JS 文件中的模式定义为变量,请使用

var mypattern = /^(?:\+[0-9]{2}(?: [0-9]{3}){3}|[0-9]{2} [0-9]{7})?$/;

请注意,当使用正则表达式定界符时,正则表达式需要锚点才能匹配整个输入。

参见regex demo

详情

  • ^ - 字符串开头
  • (?: - 可选非捕获组的开始:
    • \+ - 一个 + 字符
    • [0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3}(等于[0-9]{2}(?: [0-9]{3}){3})- 2 位数字,然后出现 3 次 space,3 位数字
  • | - 或者
    • [0-9]{2} [0-9]{7} - 2 位数,space,7 位数
  • )? - 可选组结束
  • $ - 字符串结尾。