我正在尝试为以下数字范围生成正则表达式...
我必须将00001或0000001作为起始编号
ISRAEL NNNNN 00001 99999
NNNNNNN 0000001 9999999
我正在尝试使用此正则表达式:^0*[0-9]{5}$|^0*[0-9]{7}$
但是在以下情况下失败了。它接受这些不应该的号码。
0100012
000010121
答案 0 :(得分:0)
从你的问题中无法判断是否包含前导数字,所以这里有两个版本:
包括前导数字:
^(00)?0{4}1\s+[0-9]{5}([0-9]{2})?$
没有前导数字:
^[0-9]{5}([0-9]{2})?$
(00)?0{4}1
表示“2个可选0
然后4 0
然后1
”[0-9]{5}([0-9]{2})?
表示“5位数字,然后是2位可选数字”答案 1 :(得分:0)
我认为OP试图询问的是如何编写一个正则表达式,确保所有5或7位数至少有一个非零(可能是zip码不能全为零)。
显然,使用正则表达式更容易做到这一点。解析整数,看它是否大于零且小于100000或1000000,你就完成了。当然,如果你想强迫你的用户在代码前输入额外的零......这是你的选择。如今,用户甚至可以满足更奇怪的需求。
但是,如果您感到受到任务复杂性的挑战,并希望无论价格如何都能使用正则表达式来完成,那么请转到此处:
^(?:0*[1-9]0*)+$
这将确保字符串的所有字符都是数字,并且至少其中一个字符不为零。另外检查字符串的长度,你会发现它是否等于7或5.(这是一种相对简单的方法)。
艰难的道路:
^\d{4}[1-9]|\d{3}[1-9]\d|\d{2}[1-9]\d{2}|\d[1-9]\d{3}|[1-9]\d{4}$
(这是5位邮政编码,欢迎您尝试将其扩展为7位邮政编码):P