Проверка почтового индекса США / Великобритании / CA на PHP - PullRequest
1 голос
/ 05 ноября 2010

Я не так хорош с регулярным выражением.Я надеюсь добавить функцию проверки, которая будет возвращать true / false, если введенная строка является действительным почтовым индексом США, Великобритании или CA.

США: NNNNN CA: LNL NLN UK: много комбинаций

L = буква, N = число

Для США и Канады существуют отдельные функции, но я не смогчтобы придумать единую функцию для этого.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

Взгляните на Zend_Validate_Postcode из Zend Framework :

Zend_Validate_PostCode позволяет определить, является ли данное значение действительным почтовым индексом,Почтовые коды специфичны для городов, а в некоторых регионах они называются почтовыми индексами.

Zend_Validate_PostCode знает более 160 различных форматов почтовых индексов.Для выбора правильного формата есть 2 способа.Вы можете использовать либо полностью квалифицированную локаль, либо установить свой собственный формат вручную.

Полагаю, вы можете либо посмотреть на источник, либо использовать его в качестве автономного компонента.Он может иметь зависимости внутри ZF, но вам, конечно, не нужно будет использовать всю инфраструктуру только для этого компонента.Надеюсь, это поможет.

1 голос
/ 05 ноября 2010

Мое решение состоит в том, чтобы использовать три отдельных регулярных выражения с использованием логических 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 не будет переопределено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...