RegEx适用于正好5位数字且仅允许一个前导零的数字

rdrgkggo  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(125)

我正试图写一个正则表达式的数字,必须有5位数字,允许一个前导零,但不超过一个。
什么是有效的:12345,01234,01015,01111,10000什么是无效的:1234、123456、00123、00001、00012
这是我以前的情况(不允许前导零):

/^(?!0)\d{5}$/

这就是我试图“扩展”这个表达式的方法:

^(0[1-9]|[1-9]\d{0,5})$

但是现在所有少于5位数的数字都有效,并且最重要的更改(允许一个前导零)不起作用。
我在第二个表达中哪里出错了?或者我只是在我的原始表达式中缺少了一个条件?

92dk7w1h

92dk7w1h1#

如果您重新表述问题,则可以轻松地使用负前瞻解决问题:你想匹配任何不以两个(或更多)零开头的五位数字符串:

^(?!00)\d{5}$

参见regex demo
此外,正则表达式可以在没有lookahead的情况下重写(以防您需要将模式与不支持PCRE类功能的正则表达式引擎一起使用):

^(0[1-9][0-9]{3}|[1-9][0-9]{4})$

如果支持\d

^(0[1-9]\d{3}|[1-9]\d{4})$
bvjveswy

bvjveswy2#

您尝试 *“扩展”表达式 * 的操作可以按以下方式修复。

^(?:0[1-9]|[1-9]\d)\d{3}$

See this demo at regex101
我使用(?:非捕获组)作为alternating选项。

iugsix8n

iugsix8n3#

您可以从2位数字开始匹配,然后Assert左边没有2个零,然后匹配最后3位数字:

^\d\d(?<!00)\d{3}$

Regex demo

相关问题