Подтвердить почтовый индекс Великобритании — как короткую, так и длинную версию

Я попробовал один из них на веб-сайте .gov, как указано здесь во многих вопросах, но, похоже, он не работает для коротких почтовых индексов.

Мое регулярное выражение:

preg_match('^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))^', $this->post['location'], $matches)

Когда я использую длинный почтовый индекс формата: AA9 9ZZ это работает, но один из форматов AA9 оленья кожа. Мне нужны следующие форматы для работы:

  • AA9
  • AA99
  • AA9 9ZZ
  • AA99 9ZZ

1

Решение

В соответствии с шаблоном, который вы указали и сделав вторую часть необязательной, я получаю:

~^(?:gir(?: *0aa)?|[a-pr-uwyz](?:[a-hk-y]?[0-9]+|[0-9][a-hjkstuw]|[a-hk-y][0-9][abehmnprv-y])(?: *[0-9][abd-hjlnp-uw-z]{2})?)$~i

демонстрация

или чтобы сделать его более читабельным:

~ # pattern delimiter
^ # start of the string anchor
(?: # branch 1
gir
(?:[ ]*0aa)? # second part optional (branch 1)
| # branch 2
[a-pr-uwyz] # I put it in factor to shorten the pattern
(?:
[a-hk-y]?[0-9]+
|
[0-9][a-hjkstuw]
|
[a-hk-y][0-9][abehmnprv-y]
)
(?:[ ]*[0-9][abd-hjlnp-uw-z]{2})? # second part optional (branch 2)
)
$ # end of the string anchor
~ix
0

Другие решения

^[A-Z]{1,2}\d{1,2}(?:(?: )?\d[A-Z]{2})?$ это шаблон, который я мог бы придумать, и это похоже на работу.

Это, вероятно, может быть улучшено, хотя. Я не регулярный эксперт.

Вот живой пример

0

Из-за того, как работают почтовые индексы в Великобритании, проверка их с помощью регулярных выражений не является надежным решением. Две из основных проблем:

  • Royal Mail может изменить формат некоторых почтовых индексов, добавив районы, которые не охватываются регулярным выражением, которое вы решите использовать.
  • Проверка с помощью регулярного выражения только гарантирует, что почтовый индекс находится в допустимом формате в соответствии с вашими правилами регулярного выражения, а не то, что это почтовый индекс, который существует как часть адреса.

Royal Mail предоставит База данных PAF, который содержит все адреса Великобритании, включая почтовые индексы. Многие компании предоставили эти данные через API и плагины веб-сайтов.

Например, я работаю в компании PCA Predict, и у нас есть демо нашего решения в действии. Это плагин для онлайн-форм оформления заказа, который позволяет клиенту начать вводить любую часть своего адреса и автоматически заполнит поля при выборе своего адреса.

Мы также предлагаем REST API для автоматической проверки и возврата адресов.

Пожалуйста, не стесняйтесь комментировать, если вам нужна помощь с проверкой адреса, так как это может быть намного сложнее, чем кажется на первый взгляд! Я также не говорю, что вы должны использовать наши сервисы, но попробуйте, и у Google есть и другие варианты.

0

У меня возникла та же проблема, и довольно трудно проверить почтовый индекс, Royal Mail Add и Remove почтовые индексы. так что в течение последних 2 недель я создавал базу данных адресов и бесплатно создал очень неприятный API, вы можете проверить почтовый индекс, и он будет возвращать каждый адрес для этого почтового индекса.

Я надеюсь, что это полезно.

https://www.pervazive.co.uk/free-api-for-uk-postcode-lookup/

Конечная точка

GET: https://api.pervazive.co.uk/postcode.php?postcode=[POSTCODE]

отклик

Request GET: -> https://api.pervazive.co.uk/postcode.php?postcode=AB10+1AB

Возвращаемый формат: JSON

{"predictions":[
{"ID":"0","Address":"Aberdeen City Council, Marischal College, Broad Street, Aberdeen, Aberdeenshire, AB10 1AB","Postcode":"AB10 1AB"}
],"Execution_Time":"0.50983214378357","status":"200"}
0
По вопросам рекламы [email protected]