我认为人们会一起处理小代码项目,但我没有看到它们,所以这里很简单:
验证有效美国邮政编码的代码。我知道那里有邮政编码数据库,但仍有一些用途,如网页,快速验证,以及邮政编码不断发布的事实,因此您可能希望使用弱验证。
我在wiki / blog上的一个侧面项目中写了一些关于邮政编码的文章:
https://benc.fogbugz.com/default.asp?W24
还有一种新的奇怪类型的邮政编码。
https://benc.fogbugz.com/default.asp?W42
我可以使用javascript代码,但看看我们可以在这里找到多少种语言会很有趣。
答案 0 :(得分:54)
Javascript Regex Literal :
美国邮政编码:/(^\d{5}$)|(^\d{5}-\d{4}$)/
var isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test("90210");
某些国家/地区使用Postal Codes,这会使这种模式失败。
答案 1 :(得分:26)
function isValidUSZip(sZip) {
return /^\d{5}(-\d{4})?$/.test(sZip);
}
答案 2 :(得分:6)
这是一个JavaScript函数,可根据国家/地区代码验证ZIP /邮政编码。它允许有点自由格式化。您也可以为其他国家/地区添加案例。请注意,默认情况允许空邮政编码,因为并非所有国家/地区都使用它们。
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);
}
仅供参考这个涉及虚荣邮政编码的第二个链接似乎是愚人节的笑话。
答案 3 :(得分:5)
如果您为加拿大做的事,请记住并非所有字母都有效
这些字母无效:D,F,I,O,Q或U. 并且字母W和Z不用作第一个字母。 还有一些人在第3个字符后面使用了一个可选空格。
以下是加拿大邮政编码的正则表达式:
new RegExp(/^[abceghjklmnprstvxy][0-9][abceghjklmnprstvwxyz]\s?[0-9][abceghjklmnprstvwxyz][0-9]$/i)
最后一个 i 使其不区分大小写。
答案 4 :(得分: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);
};
答案 5 :(得分:1)
这是一个很好的JavaScript解决方案,可以解决您的验证问题:
/\b\d{5}-\d{4}\b/
答案 6 :(得分:1)
当我在邮件行业工作了17年时,我已经看到了这个领域的各种数据输入,我觉得有趣的是,有多少人不知道他们的地址,因为它是由USPS定义的。我仍然看到这样的地址:
XYZ学院 IT部门 City,St ZIP
最糟糕的部分是邮件99%的时间都是邮件发送,另外1%是邮件,因为它应该是一个不完整的地址。
在之前有人提到USPS CASS的帖子中,该软件不是免费的。
对于正则表达式,邮政编码测试员很好,我使用表达式来确定美国,加拿大,英国或澳大利亚邮政编码。我已经看到了日本和其他人的表达方式,只会在选择拉链所属的正确国家时遇到挑战。
到目前为止,最好的答案是使用State和Country的下拉列表。然后使用表格进一步验证是否需要。只是为了给你一个想法,只有前5位数字有84052个可接受的US City St Zip组合。根据ISO有249个有效国家,有65个美国州/地区。
还有Military,PO Box和Unique邮政编码类。 KISS适用于此。
答案 7 :(得分:1)
建议您查看USPS地址信息API。您可以验证zip并获取标准格式的地址。 https://www.usps.com/business/web-tools-apis/address-information.htm
答案 8 :(得分: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);
}
希望这会对某人有所帮助。
答案 9 :(得分:0)
为了进一步解决这个问题,UPS和FedEx无法在没有使用USPS作为最终处理程序的情况下交付给PO BOX。大多数出货软件都不允许使用邮政信箱邮票进行标准服务。 PO Box拉链的示例是00604 - RAMEY,PR和06141 - HARTFORD,CT。
验证邮政编码的全部需求确实可以解决你走多远,预算是多少,时间线是什么。
像表达式测试,测试,测试和测试一样。我有一个状态验证的表达式,发现YORK在失败时通过了。有成千上万的人有一次进入纽约,纽约10279,呃。
另外请记住,USPS不喜欢像N. Market St.这样的标点符号,并且对于像Lane,Place,North,Corporation等类似的东西也有非常具体的可接受的缩写。
答案 10 :(得分:0)
Drupal 7在这里也有一个简单的解决方案,这将允许您对多个国家进行验证。
https://drupal.org/project/postal_code_validation
中测试答案 11 :(得分:-1)
您指的是地址验证吗?就像迈克之前的回答一样,你需要迎合其他95%。
您可以做的是当用户选择他们的国家/地区,然后启用验证。地址验证和邮政编码验证是两回事。验证ZIP只是确保其整数。地址验证正在验证实际地址的准确性,最好是邮寄。
答案 12 :(得分:-1)
为了允许用户输入带有小写字母的加拿大邮政编码,正则表达式需要如下所示:
/ ^([A-ZA-Z] [0-9] [A-ZA-Z])\ S *([0-9] [A-ZA-Z] [0-9])$ /