邮政编码(美国邮政编码)验证

ZIP Code (US Postal Code) validation

本文关键字:邮政编码 验证 美国      更新时间:2023-09-26

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

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

我在我的维基/博客上的一个附带项目中写了一些关于邮政编码的内容:

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

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

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

我可以编写javascript代码,但看看这里可以使用多少种语言会很有趣。

Javascript Regex Literal

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

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

一些国家使用邮政编码,这将使这种模式失效。

function isValidUSZip(sZip) {
   return /^'d{5}(-'d{4})?$/.test(sZip);
}

这里有一个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);
}

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

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

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

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

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

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

以下是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.");

EDIT:由于以上代码是jQuery Validate插件的一部分,因此它取决于.addMethod()方法。

删除对插件的依赖,使其更通用。。。。

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

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

这是一个很好的JavaScript解决方案,可以解决您的验证问题:

/'b'd{5}-'d{4}'b/

由于我在邮件行业工作了17年,我看到了该领域的各种数据输入,我发现有多少人不知道自己的地址,因为它是由美国邮政定义的。我仍然看到这样的地址:

XYZ学院
IT部门
城市,圣ZIP

最糟糕的是,99%的邮件都已送达,另外1%的邮件则因地址不完整而被退回。

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

对于regex,邮政编码测试仪很好,我使用表达式来确定是US、CA、UK还是AU邮政编码。我见过日本和其他国家的表达方式,它们只会增加选择拉链所属国家的挑战。

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

还有军用类、仅邮政信箱类和唯一邮政编码类。KISS适用于此。

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

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

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

希望这能帮助到别人。

为了进一步回答我的问题,UPS和联邦快递不能在没有使用USPS作为最终处理程序的情况下交付到邮政信箱。大多数运输软件都不允许他们的标准服务使用邮政信箱zip。邮政信箱拉链的例子有00604-RAMEY,PR和06141-HARTFORD,CT。

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

就像任何带有表达式test、test、test和test的东西一样。我有一个州验证的表达,发现YORK在应该失败的时候通过了。千分之一的人进入纽约,纽约10279,呃。

还要记住,美国邮政不喜欢像N.Market St.这样的标点符号,也有非常具体的可接受的缩写,如Lane、Place、North、Corporation等。

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

https://drupal.org/project/postal_code_validation

您也需要此模块
https://drupal.org/project/postal_code

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

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

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

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

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