4位前缀的实时输入验证,末尾带有可选的8位数字

时间:2016-08-03 04:43:58

标签: regex validation

这是我的以下正则表达式:

/^08(17|18|19|31|32|33|38|59|77|78)[0-9]{0,8}$/

如果我在输入字段中输入08将显示通知错误,我想要的是如果我输入0817将显示成功,如果我输入08我想要不出现通知错误。也许解决方案是在正则表达式中使用不捕获组。但是怎么做?

这是我的前缀验证我想要的:

0817, 0818, 0819, 0831, 0832, 0833, 0838, 0859, 0877, 0878

2 个答案:

答案 0 :(得分:1)

您希望为您的代码实现实时输入验证,其中包含4位数的前缀,然后是0到8个任意数字。

关键是您不能使子模式可选顺序,您需要使用嵌套可选组来要求在右侧之前存在左手数字之一。

这种模式变得相当凌乱,但这是让它发挥作用的唯一方法:

^0(?:8(?:1(?:[789][0-9]{0,8})?|3(?:[1238][0-9]{0,8})?|5(?:9[0-9]{0,8})?|7(?:[78][0-9]{0,8})?)?)?$

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • 0 - 强制性0
  • (?:
    • 8 - 强制性8
      • (?:
      • 1 - 强制性1后跟......
      • (?: - 与......相匹配的可选组
        • [789] - 7,或8,或9后跟
        • [0-9]{0,8} - 0到8 任何数字
      • )? - (1之后的可选组的结尾)
      • | - 或
      • 3(?:[1238][0-9]{0,8})? - (与上文类似)
      • | - 或
      • 5(?:9[0-9]{0,8})? - (与上文类似)
      • | - 或
      • 7(?:[78][0-9]{0,8})? - (与上文类似)
    • )? - 与8匹配的可选组的结尾及其后的所有
  • )? - 第一个0后的整个部分可选
  • $ - 字符串结束。

答案 1 :(得分:0)

您不需要非捕获组。您只需?作为可选事件。它将被视为有效0或1次。

/^08(17|18|19|31|32|33|38|59|77|78)?[0-9]{0,8}$/

证明:https://regex101.com/r/xC7mT4/1