用一种正则表达式验证美国和加拿大的邮编/邮政编码

13

我正在开发一个文具程序。客户可以选择他们所在的地区,美国或加拿大。当他们输入地址时,必须输入邮政编码。我正在尝试验证该字段,但无法针对美国或加拿大使用正则表达式。我需要一种正则表达式来验证两个国家的邮政编码。

3个回答

24

我不知道你使用的是什么语言,因此我不会使用任何字符类的缩写:

^[0-9]{5}$|^[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9]$

根据您的语言,您可能可以缩写为

^([0-9]{5}|[A-Z][0-9][A-Z] ?[0-9][A-Z][0-9])$
或者
^(\d{5}|[A-Z]\d[A-Z] ?\d[A-Z]\d)$
支持ZIP+4:
^(\d{5}(-\d{4})?|[A-Z]\d[A-Z] ?\d[A-Z]\d)$

如果你想对你的加拿大编码进行更加严谨的挑剔:

^(\d{5}(-\d{4})?|[A-CEGHJ-NPRSTVXY]\d[A-CEGHJ-NPRSTV-Z] ?\d[A-CEGHJ-NPRSTV-Z]\d)$

我不太确定加拿大的邮政编码是如何工作的,但是是否应该接受小写字母呢? - imtheman
我认为不是。加拿大邮政编码 - dg99
2
这也不支持美国的+4邮政编码,即12345-6789。 - Khaelex

2

在上面的回答中,你可以在正则表达式的开头添加(?i),使其不区分大小写。所以它会变成这样:

^(?i)(\d{5}(-\d{4})?|[A-CEGHJ-NPRSTVXY]\d[A-CEGHJ-NPRSTV-Z] ?\d[A-CEGHJ-NPRSTV-Z]\d)$

除非这是与语言相关的(并且在我编写代码的语言中不起作用;OP没有说他们使用的是什么语言)。 - nnnnnn
出于学术目的,这是什么编程语言?我正在使用的语言是asp.net/c#。 - Kurt LP
我在考虑使用Javascript,通过应用一个不是模式本身的标志(在创建正则表达式对象时作为额外参数)来使正则表达式不区分大小写。 - nnnnnn
阅读第一个答案的评论,您会注意到在加拿大邮政编码中实际上不允许使用小写字母。因此,除了(?i)是非标准的之外,它对于这个问题也是不正确的。 - dg99

1

这对我有用。测试了美国邮政编码和加拿大邮政编码。

^((\d{5}-\d{4})|(\d{5})|([A-Z|a-z]\d[A-Z|a-z]\d[A-Z|a-z]\d))$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接