我对正则表达式不太好。我希望添加一个验证函数,如果输入的字符串是有效的美国、英国或加利福尼亚邮政编码,它将返回真/假。
US: NNNNN CA: LNL NLN UK: 很多组合
L = 字母,N = 数字
美国和加拿大有单独的功能,但我没有想出一个统一的功能来做到这一点。
我对正则表达式不太好。我希望添加一个验证函数,如果输入的字符串是有效的美国、英国或加利福尼亚邮政编码,它将返回真/假。
US: NNNNN CA: LNL NLN UK: 很多组合
L = 字母,N = 数字
美国和加拿大有单独的功能,但我没有想出一个统一的功能来做到这一点。
Zend_Validate_Postcode
从Zend 框架看一下:
Zend_Validate_PostCode 允许您确定给定值是否是有效的邮政编码。邮政编码特定于城市,在某些地区称为邮政编码。
Zend_Validate_PostCode 知道超过 160 种不同的邮政编码格式。要选择正确的格式,有两种方法。您可以使用完全限定的语言环境,也可以手动设置自己的格式。
我想您可以查看源代码,也可以将其用作独立组件。它可能在 ZF 中具有依赖关系,但您肯定不需要仅针对该组件使用整个框架。希望有帮助。
我的解决方案是使用逻辑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
不会被覆盖。