php extract UK почтовый индекс и подтвердите его

У меня есть некоторые текстовые блоки, например

 Джон + и + Co-бухгалтеры-Хоув-BN31GE-2959519

Мне нужна функция для извлечения почтового индекса «BN31GE». Возможно, не существует и имеет текстовый блок без почтового индекса, поэтому функция должна также проверять, действительно ли извлеченный текст является допустимым почтовым индексом.

 Джон + и + Co-бухгалтеры-Хоув-2959519

Найдите код ниже, чтобы извлечь действительный почтовый индекс в Великобритании. Он возвращает массив, если почтовый код найден в противном случае пустым.

<?php $getPostcode=""; $str="John+and+Co-Accountants-Hove-BN31GE-2959519"; $getArray = explode("-",$str); if(is_array($getArray) && count($getArray)>0) { foreach($getArray as $key=>$val) { if(preg_match("/^(([A-PR-UW-Z]{1}[A-IK-Y]?)([0-9]?[A-HJKS-UW]?[ABEHMNPRVWXY]?|[0-9]?[0-9]?))\s?([0-9]{1}[ABD-HJLNP-UW-Z]{2})$/i",strtoupper($val),$postcode)) { $getPostcode = $postcode[0]; } } } print"<pre>"; print_r($getPostcode); ?> 

Стандарт данных правительства Великобритании для почтовых индексов:

 ((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2})) 

Редактирование: у меня было выше в каком-то (личном) коде со ссылкой на веб-страницу правительства Великобритании, которая не существует. Соответствующим британским стандартом является BS7666, и информация об этом в настоящее время доступна здесь . Это указывает немного другое регулярное выражение.

Используйте регулярное выражение: функция preg_grep,

Я не знаю формат английского почтового индекса, но вы можете пойти с чем-то вроде:

 (-[a-zA-Z0-9]+-)+ 

Это соответствует

  • "-Accountants-"
  • "-BN31GE-"

Затем вы можете продолжать принимать второе значение или вы можете улучшить регулярное выражение в соответствии с английскими почтовыми индексами, например,

  ([A-Z0-9]{6})