我正在尝试为一个数字编写一个正则表达式,该数字必须恰好有 5 位数字,其中允许有一位前导零,但不能超过 1。
有效值:12345、01234、01015、01111、10000 无效值:1234、123456、00123、00001、00012
这是我之前的情况(不允许使用前导零时):
/^(?!0)\d{5}$/
Run Code Online (Sandbox Code Playgroud)
这就是我尝试“扩展”表达式的方式:
^(0[1-9]|[1-9]\d{0,5})$
Run Code Online (Sandbox Code Playgroud)
但现在所有少于 5 位的数字都有效,并且最重要的更改(允许前导零)不起作用。
我在第二个表达式中哪里搞砸了?或者我只是在原始表达中遗漏了一个条件?
如果您重新表述问题,您可以轻松地使用负前瞻解决问题:您想要匹配任何不以两个(或更多)零开头的五位字符串:
^(?!00)\d{5}$
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。
此外,可以在不使用前瞻的情况下重写正则表达式(以防万一您需要将模式与不支持类似 PCRE 功能的正则表达式引擎一起使用):
^(0[1-9][0-9]{3}|[1-9][0-9]{4})$
Run Code Online (Sandbox Code Playgroud)
如果\d支持:
^(0[1-9]\d{3}|[1-9]\d{4})$
Run Code Online (Sandbox Code Playgroud)