1

我需要将英国邮政编码分成两部分。我有一些代码可以获取前半部分,但它并没有涵盖所有内容(例如 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。

4

2 回答 2

4

incode 始终是一个数字后跟两个字母字符,因此最简单的拆分方法是去掉最后三个字符,以便轻松验证。

修剪任何空格:它们纯粹是为了便于人类阅读。

剩下的第一部分就是输出代码。这可以是单个字母字符,后跟 1 或 2 位数字;两个字母字符后跟 1 或 2 位数字;或一个或两个字符后跟一个数字,然后是一个附加的字母字符。

有几个值得注意的例外: SAN TA1 是公认的邮政编码,GIR 0AA 也是如此;但这是仅有的两个不遵循标准模式的。

要测试邮政编码是否有效,正则表达式并不足够……您需要进行查找以检索该信息。

于 2012-02-04T21:46:05.583 回答
2

如果您不关心验证,根据此处的信息(在页面底部有不同的正则表达式,包括您的)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];
于 2012-02-05T02:24:05.210 回答