这是我的以下正则表达式:
/^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
答案 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}$/