PHP 中的美国/英国/加拿大邮政编码验证

发布于 2024-09-30 21:20:56 字数 174 浏览 11 评论 0原文

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

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

L = 字母,N = 数字

美国和加拿大有单独的函数,但我未能想出一个统一的函数来执行此操作。

Im not so good with regex. Im looking to add a validation function that will return true/false if the string entered into it is a valid US, UK, or CA zip/postal code.

US: NNNNN
CA: LNL NLN
UK: Lots of combinations

L = letter, N = Number

There are individual functions for US, and Canada, but I failed to come up with a single unified function to do this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

む无字情书 2024-10-07 21:20:56

查看 Zend_Validate_Postcode 来自Zend 框架

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

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

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

Take a look at Zend_Validate_Postcode from the Zend Framework:

Zend_Validate_PostCode allows you to
determine if a given value is a valid
postal code. Postal codes are specific
to cities, and in some locales termed
ZIP codes.

Zend_Validate_PostCode
knows more than 160 different postal
code formates. To select the correct
format there are 2 ways. You can
either use a fully qualified locale or
you can set your own format manually.

I guess you could either look at the source, or use it as a stand-alone component. It may have dependencies within the ZF, but you will certainly not need to use the entire framework just for that component. Hope that helps.

独孤求败 2024-10-07 21:20:56

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

My solution would be to go for three separate regexes using logical OR operators:

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
}

Note that this works because PHP uses short-circuit logic. Once one test has passed, the others are ignored so $matches won't be overridden.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文