我试图找到“正确的”美国邮政编码验证,但找不到。所有这些都建议使用 5 位数的某种版本,可选地后跟破折号和 4 位数。最简单的形式:
(^\d{5}$)|(^\d{5}-\d{4}$)
此及其所有变体都会传递“无效”邮政编码 00000 和 00000-0000。美国邮政邮政编码可能以 2 个零开头(00501 - 纽约州霍尔茨维尔),但不能超过两个零。
我需要帮助修改上述表达式以排除 000dd 和 000dd-dddd。最后 4 个可以全零,并不重要。
因此,00000、0000d、000dd 应该失败。
首先,您可以对现有的正则表达式进行因式分解,以便前 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})?$