【问题标题】:One Regular Expression to validate US and Canada ZIP / Postal Code一种用于验证美国和加拿大邮政编码的正则表达式
【发布时间】:2022-04-13 23:25:25
【问题描述】:

我正在开发一个文具程序。客户可以选择美国或加拿大的地区。当他们输入地址时,他们必须输入邮政编码。我正在尝试验证字段,但我不能将 reg exp 用于美国或加拿大。我需要一个验证两个国家/地区邮政编码的正则表达式。

【问题讨论】:

    标签: regex


    【解决方案1】:

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

    ^[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)$
    

    【讨论】:

    • 我不完全确定加拿大邮政编码是如何工作的,但是这也应该使用小写字母吗?
    • 我不相信。 Postal codes in Canada
    • 这也不支持美国 +4 邮政编码。 IE。 12345-6789
    【解决方案2】:

    进一步回答上述问题,您可以在正则表达式的开头添加 (?i) 以使其不区分大小写。所以它看起来像这样:

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

    【讨论】:

    • 除非那是依赖于语言的(并且不适用于 I 代码中的语言;OP 没有说明 它们 是什么语言使用)。
    • 出于学术目的,那是什么语言?我使用的语言是 asp.net/c#。
    • 我在想 Javascript,你可以通过应用一个不属于模式本身的标志来使正则表达式不区分大小写(创建正则表达式对象时它是一个额外的参数)。
    • 阅读第一个答案的 cmets,您会注意到加拿大邮政编码中实际上不允许使用小写字母。因此,除了(?i) 是非标准的这一事实之外,它也不适合这个问题。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      相关资源
      最近更新 更多