39

我以为人们会一起做一些小的代码项目,但我没有看到他们,所以这里有一个简单的:

验证有效美国邮政编码的代码。我知道那里有邮政编码数据库,但仍有一些用途,例如网页、快速验证,以及邮政编码不断发布的事实,因此您可能想要使用弱验证。

我在我的 wiki/blog 的一个附带项目中写了一些关于邮政编码的内容:

https://benc.fogbugz.com/default.asp?W24

还有一种新的、奇怪的邮政编码。

https://benc.fogbugz.com/default.asp?W42

我可以编写 javascript 代码,但是看看我们可以在这里获得多少种语言会很有趣。

4

13 回答 13

54

Javascript 正则表达式文字

美国邮政编码: /(^\d{5}$)|(^\d{5}-\d{4}$)/

var isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test("90210");

一些国家/地区使用Postal Codes,这会导致这种模式失败。

于 2008-10-02T02:11:07.027 回答
26
function isValidUSZip(sZip) {
   return /^\d{5}(-\d{4})?$/.test(sZip);
}
于 2009-02-13T15:11:06.567 回答
6

这是一个基于国家/地区代码验证邮政编码的 JavaScript 函数。它允许某种自由格式。您也可以为其他国家/地区添加案例。请注意,默认情况下允许使用空邮政编码,因为并非所有国家/地区都使用它们。

function isValidPostalCode(postalCode, countryCode) {
    switch (countryCode) {
        case "US":
            postalCodeRegex = /^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/;
            break;
        case "CA":
            postalCodeRegex = /^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/;
            break;
        default:
            postalCodeRegex = /^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/;
    }
    return postalCodeRegex.test(postalCode);
}

仅供参考第二个链接是指虚荣的邮政编码似乎是愚人节的玩笑。

于 2008-10-02T04:29:31.030 回答
5

如果您要为加拿大做事,请记住并非所有字母都有效

这些字母无效:D、F、I、O、Q 或 U 字母 W 和 Z 不用作第一个字母。还有一些人在第三个字符之后使用可选空格。

这是加拿大邮政编码的正则表达式:

new RegExp(/^[abceghjklmnprstvxy][0-9][abceghjklmnprstvwxyz]\s?[0-9][abceghjklmnprstvwxyz][0-9]$/i)

最后一个i使它不区分大小写。

于 2011-09-16T14:37:24.463 回答
3

这是 jQuery Validate 插件additional-methods.js文件中的一个...

jQuery.validator.addMethod("zipUS", function(value, element) {
    return /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(value);
}, "Please specify a valid US zip code.");

编辑:由于上面的代码是 jQuery Validate 插件的一部分,它取决于.addMethod()方法。

删除对插件的依赖并使其更通用....

function checkZip(value) {
    return (/(^\d{5}$)|(^\d{5}-\d{4}$)/).test(value);
};

示例用法:http: //jsfiddle.net/5PNcJ/

于 2013-02-20T19:05:43.907 回答
1

对于您遇到的验证问题,这是一个很好的 JavaScript 解决方案:

/\b\d{5}-\d{4}\b/
于 2011-10-31T00:34:24.320 回答
1

当我在邮件行业工作了 17 年时,我在这个领域看到了各种各样的数据输入,我发现有趣的是,有多少人不知道他们的地址,因为它是由 USPS 定义的。我仍然看到这样的地址:

XYZ 学院
IT 部门
City, St ZIP

最糟糕的部分是邮件 99% 的时间都已送达,而另外 1% 的时间是由于地址不完整而退回的。

在之前的一篇文章中,有人提到 USPS CASS,该软件不是免费的。

正则表达式邮政编码测试器很好,我使用表达式来确定美国、加利福尼亚、英国或澳大利亚的邮政编码。我见过日本和其他国家的表达方式,它们只会在选择拉链所属的正确国家时增加挑战。

到目前为止,最好的答案是对州和国家使用下拉列表。然后根据需要使用表格进一步验证。只是为了给您一个想法,仅前 5 位数字就有 84052 个可接受的美国城市街邮编组合。根据 ISO,有 249 个有效国家,美国有 65 个州/领地。

还有军事、仅邮政信箱和唯一邮政编码类。KISS 在这里适用。

于 2013-10-20T19:47:59.790 回答
1

建议您查看 USPS 地址信息 API。您可以验证 zip 并获取标准格式的地址。https://www.usps.com/business/web-tools-apis/address-information.htm

于 2014-08-22T21:10:48.637 回答
0

检查有效加拿大邮政编码的一种方法是 -

function isValidCAPostal(pcVal) {
   return ^[A-Za-z][0-9][A-Za-z]\s{0,1}[0-9][A-Za-z][0-9]$/.test(pcVal);
}

希望这会对某人有所帮助。

于 2013-02-19T11:16:01.797 回答
0

为了进一步回答我,如果不使用 USPS 作为最终处理程序,UPS 和 FedEx 就无法将其运送到 PO BOX。那里的大多数运输软件都不允许其标准服务使用 PO Box zip。邮政信箱拉链的示例是 00604 - RAMEY, PR 和 06141 - HARTFORD, CT。

验证邮政编码的整个需求实际上可能是您走多远、预算是多少、时间线是多少的问题。

就像任何带有表达式的东西一样测试,测试,测试,再测试。我有一个用于状态验证的表达式,发现 YORK 在它应该失败的时候通过了。成千上万的人进入纽约,纽约 10279,呃。

另请记住,USPS 不喜欢 N. Market St. 等标点符号,并且对 Lane、Place、North、Corporation 等具有非常具体的可接受缩写。

于 2013-10-20T20:01:54.653 回答
0

Drupal 7 在这里也有一个简单的解决方案,这将允许您针对多个国家/地区进行验证。

https://drupal.org/project/postal_code_validation

你也需要这个模块
https://drupal.org/project/postal_code

在http://simplytest.me/中测试它

于 2014-05-27T14:51:00.073 回答
-1

你指的是地址验证吗?就像迈克之前的回答一样,你需要迎合其他 95% 的人。

您可以做的是当用户选择他们的国家时,然后启用验证。地址验证和邮政编码验证是两个不同的东西。验证 ZIP 只是确保它的整数。地址验证是验证实际地址的准确性,最好用于邮寄。

于 2008-10-02T02:30:22.050 回答
-1

要允许用户也输入带有小写字母的加拿大邮政编码,正则表达式需要如下所示:

/^([a-zA-Z][0-9][a-zA-Z])\s*([0-9][a-zA-Z][0-9])$/

于 2009-02-13T15:05:04.723 回答