【问题标题】:US/UK/CA Postal Code validation in PHPPHP中的美国/英国/加拿大邮政编码验证
【发布时间】:2011-05-05 09:17:05
【问题描述】:

我不太擅长正则表达式。我希望添加一个验证函数,如果输入的字符串是有效的美国、英国或加利福尼亚邮政编码,它将返回真/假。

美国:NNNN CA: LNL NLN 英国:很多组合

L = 字母,N = 数字

美国和加拿大有单独的功能,但我没有想出一个统一的功能来做到这一点。

【问题讨论】:

  • 您想对英国进行真正的检查(即仅查找现有的邮政编码)吗?或者一个模式就足够了?
  • 美国的相同问题 ... 66666 与模式匹配,但不是有效的邮政编码。然后还有NNNNN-NNNN“ZIP+4”表格。

标签: php zipcode postal-code


【解决方案1】:

Zend FrameworkZend_Validate_Postcode

Zend_Validate_PostCode 允许您 确定给定值是否有效 邮政编码。邮政编码是特定的 到城市,在某些地方称为 邮政编码。

Zend_Validate_PostCode 了解超过 160 种不同的邮政 代码格式。要选择正确的 格式有2种方式。你可以 要么使用完全限定的语言环境,要么 您可以手动设置自己的格式。

我想您可以查看源代码,也可以将其用作独立组件。它可能在 ZF 中具有依赖关系,但您肯定不需要仅针对该组件使用整个框架。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    我的解决方案是使用逻辑 OR 运算符来使用三个单独的正则表达式:

    if (
        preg_match('/^\d{5}(?:\-\d{4})?$/i', $code, $matches) OR
        preg_match('/^[a-z]\d[a-z] ?\d[a-z]\d$/i', $code, $matches) OR
        preg_match('/^[a-z]{1,2}\d{1,2} ?\d[a-z]{2}$/i', $code, $matches)
    ) {
        // deal with $matches here
    }
    

    请注意,这是因为 PHP 使用短路逻辑。一项测试通过后,其他测试将被忽略,因此 $matches 不会被覆盖。

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多