我正在尝试为以下数字范围生成正则表达式...
我必须将 00001 或 0000001 作为起始编号
ISRAEL NNNNN 00001 99999
NNNNNNN 0000001 9999999
我正在尝试使用这个正则表达式:^0*[0-9]{5}$|^0*[0-9]{7}$
但它在以下情况下失败。它接受这些不应该的数字。
0100012
000010121
我正在尝试为以下数字范围生成正则表达式...
我必须将 00001 或 0000001 作为起始编号
ISRAEL NNNNN 00001 99999
NNNNNNN 0000001 9999999
我正在尝试使用这个正则表达式:^0*[0-9]{5}$|^0*[0-9]{7}$
但它在以下情况下失败。它接受这些不应该的数字。
0100012
000010121
我认为 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
从您的问题中无法判断是否包含前导数字,所以这里有两个版本:
包括领先的数字:
^(00)?0{4}1\s+[0-9]{5}([0-9]{2})?$
没有前导数字:
^[0-9]{5}([0-9]{2})?$
(00)?0{4}1
表示“2 可选0
然后 40
则1
” [0-9]{5}([0-9]{2})?
表示“5 位数字,然后 2 位可选数字”