PHP中的美国/英国/CA邮政编码验证

PHP中的美国/英国/CA邮政编码验证,php,zipcode,postal-code,Php,Zipcode,Postal Code,我对正则表达式不太在行。我希望添加一个验证函数,如果输入的字符串是有效的美国、英国或CA邮政编码,该函数将返回true/false 美国:nnnn CA:LNLN 英国:很多组合 L=字母,N=数字 我们和加拿大都有单独的函数,但我没能想出一个统一的函数来实现这一点。我的解决方案是使用逻辑OR运算符使用三个单独的正则表达式: if ( preg_match('/^\d{5}(?:\-\d{4})?$/i', $code, $matches) OR preg_match('/^[a

我对正则表达式不太在行。我希望添加一个验证函数,如果输入的字符串是有效的美国、英国或CA邮政编码,该函数将返回true/false

美国:nnnn CA:LNLN 英国:很多组合

L=字母,N=数字


我们和加拿大都有单独的函数,但我没能想出一个统一的函数来实现这一点。

我的解决方案是使用逻辑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就不会被覆盖。

我的解决方案是使用逻辑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将不会被覆盖。

请从以下位置查看:

Zend_验证_邮政编码允许您 确定给定值是否为有效值 邮政编码。邮政编码是特定的 到城市,在一些地方被称为 邮政编码

Zend_验证_邮政编码 了解160多种不同的邮政服务 代码格式化。选择正确的 格式有两种方式。你可以 使用完全限定的区域设置或 您可以手动设置自己的格式

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

请从以下位置查看:

Zend_验证_邮政编码允许您 确定给定值是否为有效值 邮政编码。邮政编码是特定的 到城市,在一些地方被称为 邮政编码

Zend_验证_邮政编码 了解160多种不同的邮政服务 代码格式化。选择正确的 格式有两种方式。你可以 使用完全限定的区域设置或 您可以手动设置自己的格式


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

您想对英国进行真正的检查,即只查找现有的邮政编码吗?或者一个模式就足够了?对我们来说同样的问题。。。66666与模式匹配,但不是有效的邮政编码。还有NNNNN-NNNNZIP+4表格。你想对英国进行真正的检查,即只查找现有的邮政编码吗?或者一个模式就足够了?对我们来说同样的问题。。。66666与模式匹配,但不是有效的邮政编码。还有NNNNN-NNNNZIP+4表格。