Regex:正在验证美国邮政编码

Regex:正在验证美国邮政编码,regex,validation,Regex,Validation,我正在寻找一个能够验证美国邮政编码且一开始不能包含超过2个0的正则表达式: ^(?!0{3})[0-9]{3,5}$ 例如:00979是一个有效的邮政编码(波多黎各) 但我希望用户不要输入类似000979或00012的内容 有效的Zipcode是:979、0979、00979、970、907、0907、00970 无效的Zipcode是:0000000012,12 我想出了一个好主意 /^\d[0-9][0-9]{1,3}[1-9]([\-]\d{4})?$/ 但这并不验证979。我做错了什

我正在寻找一个能够验证美国邮政编码且一开始不能包含超过2个0的正则表达式:

^(?!0{3})[0-9]{3,5}$
例如:00979是一个有效的邮政编码(波多黎各)

但我希望用户不要输入类似000979或00012的内容

有效的Zipcode是:979、0979、00979、970、907、0907、00970

无效的Zipcode是:0000000012,12

我想出了一个好主意

/^\d[0-9][0-9]{1,3}[1-9]([\-]\d{4})?$/

但这并不验证979。我做错了什么?我查看了其他有关验证美国邮政编码的参考资料,但没有一个验证跟踪0的案例。

您的\d不是已经筛选出1[0-9]了吗? /^\d[0-9][0-9]{1,3}1-9$/
9 7 9 oops…

您可以使用此正则表达式,它在开始时最多允许2个零:

^(?!0{3})[0-9]{3,5}$

是否
01234
为有效条目?是否必须使用正则表达式?通常邮政编码表示为5位小数(忽略邮政编码+4),因此
979
无效。您能否使用regexp确认它正好是5个十进制数字,然后转换为整数并检查其值是否至少为100?或者它与
^[0-9]{5}$
匹配,而与
^000
不匹配?@anubhava:是的,这是一个有效条目,尽管我怀疑该邮政编码是否存在,但我正在检查是否存在。我构建这个正则表达式是为了在它出现之前进行FE验证。@KeithThompson:你所说的正是我与我的PM争论的内容。但是,因为我们以前允许用户输入3到5位数的Zipcode,所以我们不想改变这一点,但现在我们想在不允许尾随0的情况下添加此验证,这很奇怪。根据我的经验,
979
将是无效的邮政编码,正确地写为
00979
。我不确定邮局是否会接受那张表格。但是如果您决定允许用户省略前导零(这只适用于美国东海岸),那么我想这就是您需要做的。我的另一个问题:你真的必须用一个正则表达式来实现吗?如果您可以使用两个单独的测试,它将更容易和更清晰。在查看您的正则表达式并使用它之后,我计算了更多的角案例,例如970、907、9790等。。但是在大多数情况下,你的正则表达式是有效的:)是的,这在大多数情况下都有效。。想不出更多的边缘案例了。我也会编辑我的问题,以便列出更多的边缘案例。谢谢