PHP:将邮政编码分成两部分?

Posted

技术标签:

【中文标题】PHP:将邮政编码分成两部分?【英文标题】:PHP: Split a postcode into two parts? 【发布时间】:2012-02-04 21:14:05 【问题描述】:

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

【问题讨论】:

你能发布示例输入和输出数据吗? 您意识到您生成的基于正则表达式进行验证的任何内容都可能在几个月后过时......要正确验证,您必须进行查找......并作为参考, “两部分”被称为 incode 和 outcode 您关心实际验证还是只想将其分成两个和平? 好吧,但我想我可以像马克贝克所说的那样根据数据库验证它。仍然需要将其分解为 2 tho 【参考方案1】:

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

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

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

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

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

【讨论】:

很高兴最后一位总是 3 个字符,所以我可以这样做 $outward = substr(0, -3, $postcode);和 $inward = substr(-3, $postcode) 这使它更容易 是的,你可以(至少如果你以正确的顺序获取参数并确保你摆脱了多余的空格)$inCode = substr(trim($postcode), -3); $outCode = trim(substr(trim($postcode), 0, -3));.... 它非常简单,甚至适用于像“SW1A 1AA”这样的邮政编码。然后查找可以测试该地址是否确实存在。【参考方案2】:

如果您不关心验证,请根据此处的信息(在页面底部有不同的正则表达式,包括您的)http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom 您可以用于除安圭拉以外的所有内容

  $str = "BX3 2BB";
  preg_match('#^(.*)(\s+)?(\d\w2)$#', $str, $matches);
  echo "Part #1 = " . $matches[1];
  echo "<br>Part #2 = " . $matches[3];

【讨论】:

以上是关于PHP:将邮政编码分成两部分?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 部分邮编匹配

php正则表达式验证(邮件地址Url地址电话号码邮政编码)

模式匹配部分英国邮政编码

PHP - 英国邮政编码只返回部门

使用 HTML / PHP 的邮政编码 / 页面查找器

邮政地址和客户编号的 Elasticsearch 部分匹配