2

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

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

ISRAEL  NNNNN   00001   99999
        NNNNNNN 0000001 9999999

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

但它在以下情况下失败。它接受这些不应该的数字。

0100012
000010121
4

2 回答 2

0

我认为 OP 试图问的是如何编写一个正则表达式,以确保在所有 5 或 7 位数字中至少有一个非零(可能邮政编码不能全为零)。

显然,使用正则表达式更容易做到这一点。解析整数,看看它是大于零还是小于 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

于 2012-11-09T14:35:07.857 回答
0

从您的问题中无法判断是否包含前导数字,所以这里有两个版本:

包括领先的数字:

^(00)?0{4}1\s+[0-9]{5}([0-9]{2})?$

没有前导数字:

^[0-9]{5}([0-9]{2})?$
  • (00)?0{4}1表示“2 可选0然后 401
  • [0-9]{5}([0-9]{2})?表示“5 位数字,然后 2 位可选数字”
于 2012-11-09T13:32:04.257 回答