我有一些文本块,例如
John+and+Co-Accountants-Hove-BN31GE-2959519
我需要一个函数来提取邮政编码“BN31GE”。它可能碰巧不存在并且有一个没有邮政编码的文本块,因此该函数还必须验证提取的文本是否是有效的邮政编码。
John+and+Co-Accountants-Hove-2959519
我有一些文本块,例如
John+and+Co-Accountants-Hove-BN31GE-2959519
我需要一个函数来提取邮政编码“BN31GE”。它可能碰巧不存在并且有一个没有邮政编码的文本块,因此该函数还必须验证提取的文本是否是有效的邮政编码。
John+and+Co-Accountants-Hove-2959519
邮政编码的英国政府数据标准是:
((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,有关这方面的信息目前可在此处获得。这列出了一个稍微不同的正则表达式。
查找以下代码以提取有效的英国邮政编码。如果发现邮政编码为空,则返回数组。
<?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);
?>
使用正则表达式:preg_grep 函数,
我不知道英文邮政编码的格式,但您可以使用以下内容:
(-[a-zA-Z0-9]+-)+
这匹配
然后您可以继续获取第二个值,或者您可以增强您的正则表达式以完全匹配英文邮政编码,例如
([A-Z0-9]{6})