У меня есть некоторые текстовые блоки, например
Джон + и + 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]+-)+
Это соответствует
Затем вы можете продолжать принимать второе значение или вы можете улучшить регулярное выражение в соответствии с английскими почтовыми индексами, например,
([A-Z0-9]{6})