代码之家  ›  专栏  ›  技术社区  ›  menteith

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

  •  1
  • menteith  · 技术社区  · 5 年前

    • 01 1234567(两个数字,一个空格,七个数字)
    • 完全没有字符(没有输入)

    [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}|" .

    1 回复  |  直到 5 年前
        1
  •  1
  •   Wiktor Stribiżew    5 年前

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

    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})?$/"
    

    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个空格,3个数字
    • | -或
      • [0-9]{2} [0-9]{7} -2位,空格,7位
    • )? -可选组的结尾
    • $