邮政编码验证以排除某些格式

问题描述 投票:0回答:1

我试图找到“正确的”美国邮政编码验证,但找不到。所有这些都建议使用 5 位数的某种版本,可选地后跟破折号和 4 位数。最简单的形式:

(^\d{5}$)|(^\d{5}-\d{4}$)

此及其所有变体都会传递“无效”邮政编码 00000 和 00000-0000。美国邮政邮政编码可能以 2 个零开头(00501 - 纽约州霍尔茨维尔),但不能超过两个零。

我需要帮助修改上述表达式以排除 000dd 和 000dd-dddd。最后 4 个可以全零,并不重要。

因此,00000、0000d、000dd 应该失败。

regex
1个回答
0
投票

首先,您可以对现有的正则表达式进行因式分解,以便前 5 位数字被表述一次,后 4 位数字被表述为可选组,如下所示:

^\d{5}(-\d{4})?$

排除以三个“0”开头的任何内容的一种方法是插入否定的前瞻断言:

^(?!000)\d{5}(-\d{4})?$

另一种更纯粹(来自计算机科学理论框架)但更冗长的方法是手动枚举如果前 N 位数字为“0”会发生什么:

^([1-9]\d{4}|0[1-9]\d{3}|00[1-9]\d{2})(-\d{4})?$
© www.soinside.com 2019 - 2024. All rights reserved.