Я попробовал один из них на веб-сайте .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
оленья кожа. Мне нужны следующие форматы для работы:
В соответствии с шаблоном, который вы указали и сделав вторую часть необязательной, я получаю:
~^(?: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
^[A-Z]{1,2}\d{1,2}(?:(?: )?\d[A-Z]{2})?$
это шаблон, который я мог бы придумать, и это похоже на работу.
Это, вероятно, может быть улучшено, хотя. Я не регулярный эксперт.
Из-за того, как работают почтовые индексы в Великобритании, проверка их с помощью регулярных выражений не является надежным решением. Две из основных проблем:
Royal Mail предоставит База данных PAF, который содержит все адреса Великобритании, включая почтовые индексы. Многие компании предоставили эти данные через API и плагины веб-сайтов.
Например, я работаю в компании PCA Predict, и у нас есть демо нашего решения в действии. Это плагин для онлайн-форм оформления заказа, который позволяет клиенту начать вводить любую часть своего адреса и автоматически заполнит поля при выборе своего адреса.
Мы также предлагаем REST API для автоматической проверки и возврата адресов.
Пожалуйста, не стесняйтесь комментировать, если вам нужна помощь с проверкой адреса, так как это может быть намного сложнее, чем кажется на первый взгляд! Я также не говорю, что вы должны использовать наши сервисы, но попробуйте, и у Google есть и другие варианты.
У меня возникла та же проблема, и довольно трудно проверить почтовый индекс, 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"}