代码之家  ›  专栏  ›  技术社区  ›  community wiki benc

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

  •  39
  • community wiki benc  · 技术社区  · 5 年前

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

    验证有效美国邮政编码的代码。我知道那里有邮政编码数据库,但是仍然有一些使用,比如网页,快速验证,还有邮政编码不断被发布的事实,所以您可能希望使用弱验证。

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

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

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

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

    我可以编写JavaScript代码,但看看我们能用多少种语言就很有趣了。

    13 回复  |  直到 9 年前
        1
  •  54
  •   Matt user129975    9 年前

    javascript regex文本 :

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

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

    一些国家使用 Postal Codes ,这将使此模式失效。

        2
  •  26
  •   community wiki Andrey Fedorov    15 年前
    function isValidUSZip(sZip) {
       return /^\d{5}(-\d{4})?$/.test(sZip);
    }
    
        3
  •  6
  •   Mike Henry    16 年前

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

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

        4
  •  5
  •   community wiki Samer    13 年前

    如果你要去加拿大,记住不是所有的字母都是有效的。

    这些字母无效:d、f、i、o、q或u 字母w和z不是第一个字母。 还有一些人在第三个字符后使用可选的空格。

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

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

    最后 使其不区分大小写。

        5
  •  3
  •   community wiki 2 revs, 2 users 67% Sparky    11 年前

    这是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/

        6
  •  1
  •   community wiki 2 revs, 2 users 67% TorchLakeDave    13 年前

    对于验证问题,这是一个很好的javascript解决方案:

    /\b\d{5}-\d{4}\b/
    
        7
  •  1
  •   community wiki user2832940    11 年前

    我在邮件行业工作了17年,在这一领域我看到了各种各样的数据输入,我发现有趣的是,有多少人不知道他们的地址,正如USPS所定义的那样。我仍然看到这样的地址:

    XYZ学院
    计算机中心
    圣拉普城

    最糟糕的是邮件99%的时间是送达的,另外1%的时间是退回的地址不完整。

    在之前的一篇文章中,有人提到USPSCASS,这个软件不是免费的。

    要重新生成一个邮政编码测试程序是很好的,我使用表达式来确定是美国、加拿大、英国还是澳大利亚邮政编码。我见过日本和其他国家的表达方式,它们在选择拉链所属的正确国家时只会增加挑战。

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

    有军事,邮政信箱,以及独特的邮政编码类。接吻在这里适用。

        8
  •  1
  •   community wiki Carl    10 年前

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

        9
  •  0
  •   community wiki 2 revs Irfan    11 年前

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

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

    希望这能帮助别人。

        10
  •  0
  •   community wiki user2832940    11 年前

    为了进一步回答我的问题,UPS和联邦快递不能在没有使用USPS作为最终处理程序的情况下将货物送到邮政信箱。大多数出货软件都不允许在标准服务中使用邮政信箱。邮政信箱邮政编码的例子有00604-Ramey,PR和06141-Hartford,CT。

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

    像任何表达式一样,再次测试、测试、测试和测试。我有一个状态验证表达式,发现约克在应该失败的时候通过了。数千人中有一次进入纽约,纽约10279,啊。

    也要记住,USPS不喜欢N.Market St.这样的标点符号,而且对于诸如Lane、Place、North、Corporation等事物也有非常具体的可接受的缩写。

        11
  •  0
  •   community wiki pal4life    10 年前

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

    https://drupal.org/project/postal_code_validation

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

    测试它 http://simplytest.me/

        12
  •  -1
  •   Saif Khan    16 年前

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

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

        13
  •  -1
  •   community wiki Matt Bertulli    15 年前

    要允许用户使用小写字母输入加拿大邮政编码,regex需要如下所示:

    /^([a-z a-z][0-9][a-z a-z])\s*([0-9][a-z a-z][0-9])。$/