ISRAEL的正则表达式用于不同数字范围的邮政编码

时间:2012-11-09 13:04:50

标签: regex

我正在尝试为以下数字范围生成正则表达式...

我必须将00001或0000001作为起始编号

ISRAEL  NNNNN   00001   99999
        NNNNNNN 0000001 9999999

我正在尝试使用此正则表达式:^0*[0-9]{5}$|^0*[0-9]{7}$

但是在以下情况下失败了。它接受这些不应该的号码。

0100012
000010121

2 个答案:

答案 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