我正试图写一个正则表达式的数字,必须有5位数字,允许一个前导零,但不超过一个。
什么是有效的:12345,01234,01015,01111,10000什么是无效的:1234、123456、00123、00001、00012
这是我以前的情况(不允许前导零):
/^(?!0)\d{5}$/
这就是我试图“扩展”这个表达式的方法:
^(0[1-9]|[1-9]\d{0,5})$
但是现在所有少于5位数的数字都有效,并且最重要的更改(允许一个前导零)不起作用。
我在第二个表达中哪里出错了?或者我只是在我的原始表达式中缺少了一个条件?
3条答案
按热度按时间92dk7w1h1#
如果您重新表述问题,则可以轻松地使用负前瞻解决问题:你想匹配任何不以两个(或更多)零开头的五位数字符串:
参见regex demo。
此外,正则表达式可以在没有lookahead的情况下重写(以防您需要将模式与不支持PCRE类功能的正则表达式引擎一起使用):
如果支持
\d
:bvjveswy2#
您尝试 *“扩展”表达式 * 的操作可以按以下方式修复。
See this demo at regex101
我使用
(?:
非捕获组)
作为alternating选项。iugsix8n3#
您可以从2位数字开始匹配,然后Assert左边没有2个零,然后匹配最后3位数字:
Regex demo