我需要将英国邮政编码分成两部分。我有一些代码可以获得上半部分,但它并不涵盖所有内容(例如gir0aa)。有没有人能更好地验证所有英国邮政编码然后将其分解为第一和第二半?感谢。
function firstHalf($postcode) {
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',$postcode))
return preg_replace('/^([A-Z]([A-Z]?\d(\d|[A-Z])?|\d[A-Z]?))\s*?(\d[A-Z][A-Z])$/i', '$1', $postcode);
}
将ig62ts分成ig6或cm201ln到cm20。
答案 0 :(得分:4)
incode总是一个数字,后跟两个字母字符,所以最简单的分割方法就是砍掉最后三个字符,以便轻松验证。
修剪任何空格:它们纯粹是为了方便人类阅读而使用。
剩下的第一部分就是外码。这可以是单个字母字符,后跟1或2位数字;两个字母字符后跟1或2位数字;或者一个或两个字符后跟一个数字,后跟一个额外的字母字符。
有几个值得注意的例外:SAN TA1是公认的邮政编码,GIR 0AA也是如此;但这些是唯一不遵循标准模式的两种。
要测试邮政编码是否有效,正则表达式是不够的......您需要进行查找以检索该信息。
答案 1 :(得分:1)
如果您不关心验证,请根据此处的信息(在页面底部有不同的正则表达式,包括您的正则表达式)http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom您可以使用除安圭拉之外的所有内容
$str = "BX3 2BB";
preg_match('#^(.*)(\s+)?(\d\w{2})$#', $str, $matches);
echo "Part #1 = " . $matches[1];
echo "<br>Part #2 = " . $matches[3];