Утверждение почтового индекса США / Великобритании / CA в PHP

StackOverflow https://stackoverflow.com/questions/4102474

  •  29-09-2019
  •  | 
  •  

Вопрос

Я не так хорошо с Regex. Я хочу добавить функцию проверки, которая вернет True / false, если строка введена в нее, является действительной US, UK или CA Zip / Postal.

Нас: NNNNNN CA: LNL NLN UK: множество комбинаций

L = буква, n = номер

Для нас есть отдельные функции, а Канада, но я не смог придумать одну единую функцию для этого.

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top