我正在尝试找到“正确”的美国邮政编码验证,但找不到。所有验证都建议使用 5 位数字,后面可以加一个破折号和 4 位数字。最简单的形式是:
(^\d{5}$)|(^\d{5}-\d{4}$)
此代码及其所有变体均传递“无效”邮政编码 00000 和 00000-0000。美国邮政邮政编码可能以 2 个零开头(00501 - 纽约州霍尔茨维尔),但不能超过两个零。
我需要帮助修改上述表达式以排除 000dd 和 000dd-dddd。最后 4 个可以全为零,这并不重要。
因此,00000、0000d、000dd 应该会失败。
首先,您可以分解现有的正则表达式,以便前 5 位数字只陈述一次,而后 4 位数字作为可选组陈述,如下所示:
排除以三个“0”开头的任何内容的一种方法是插入一个否定前瞻断言:
另一种更纯粹(从计算机科学理论框架来看)但更冗长的方法是手动枚举如果前 N 位数字为“0”会发生什么: