1

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

US: NNNNN CA: LNL NLN UK: 很多组合

L = 字母,N = 数字

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

4

2 回答 2

3

Zend_Validate_PostcodeZend 框架看一下:

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

Zend_Validate_PostCode 知道超过 160 种不同的邮政编码格式。要选择正确的格式,有两种方法。您可以使用完全限定的语言环境,也可以手动设置自己的格式。

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

于 2010-11-05T00:07:30.183 回答
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不会被覆盖。

于 2010-11-05T00:02:32.173 回答