php获取邮政编码的第一部分
Posted
技术标签:
【中文标题】php获取邮政编码的第一部分【英文标题】:php get the first part of postcode 【发布时间】:2011-06-11 20:00:22 【问题描述】:我需要提取邮政编码的第一部分以使用数据库进行搜索计算。有任何想法吗?!我需要这个来在站点中实现一个搜索模块,该模块根据邮政编码查找一些相关信息。但是我拥有的邮政编码数据库,它没有邮政编码的第二部分,只有第一部分在那里。它适用于英国邮政编码。那么,有什么想法吗?!
【问题讨论】:
“一些相关信息”是什么意思?这与您上一个问题php codeigniter postcode search! 有何不同?你到底在坚持什么? 实际上,我正在使用数据库来计算附近的邮政编码并显示一些信息,例如商店,在用户指定的给定半径内,但我的数据库的问题是,用户可能输入BS8 1RY,但在数据库中它只有BS8,而且它总是不一样的模式,第一部分也可以由3-4个字母甚至2个字母组成。我想提取该部分以在我的计算中使用它。 好的,但是究竟你的问题是什么? 我想从用户输入中提取邮政编码的第一部分,但问题是,我不确定前 3 个字母是否构成我可以在数据库中搜索的邮政编码,或者可能是前 2 个或前 4 个字母。再一次,让我解释一下我为什么要这样做,我的数据库有邮政编码的第一部分,它没有任何特定的模式。数据库的第一部分有2,3甚至4个字母数字,但用户会输入完整的邮政编码,我不能直接在计算中使用。所以,为了计算,我需要提取邮政编码的第一部分。 视情况而定 - 英国邮政编码片段(如W1X
)是一个更大的区域。片段越小(如W1
),它覆盖的区域就越大。我还是不明白你的问题是什么?
【参考方案1】:
这不会覆盖所有可能的英国邮政编码的 100%,但会覆盖 99.999% 左右:)
/**
* @param string $postcode UK Postcode
* @return string
*/
function getUKPostcodeFirstPart($postcode)
// validate input parameters
$postcode = strtoupper($postcode);
// UK mainland / Channel Islands (simplified version, since we do not require to validate it)
if (preg_match('/^[A-Z]([A-Z]?\d(\d|[A-Z])?|\d[A-Z]?)\s*?\d[A-Z][A-Z]$/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);
// British Forces
if (preg_match('/^(BFPO)\s*?(\d1,4)$/i', $postcode))
return preg_replace('/^(BFPO)\s*?(\d1,4)$/i', '$1', $postcode);
// overseas territories
if (preg_match('/^(ASCN|BBND|BIQQ|FIQQ|PCRN|SIQQ|STHL|TDCU|TKCA)\s*?(1ZZ)$/i', $postcode))
return preg_replace('/^([A-Z]4)\s*?(1ZZ)$/i', '$1', $postcode);
// well ... even other form of postcode... return it as is
return $postcode;
测试数据:
echo 'TW135BQ -> ', getUKPostcodeFirstPart('TW135BQ'), "\n";
echo 'gir0aa -> ', getUKPostcodeFirstPart('gir0aa'), "\n";
echo 'RG5 3SQ -> ', getUKPostcodeFirstPart('RG5 3SQ'), "\n";
echo 'AB51 0GQ -> ', getUKPostcodeFirstPart('AB51 0GQ'), "\n";
echo 'YO104EA -> ', getUKPostcodeFirstPart('YO104EA'), "\n";
echo 'SE154NS -> ', getUKPostcodeFirstPart('SE154NS'), "\n";
echo 'W1B4BD -> ', getUKPostcodeFirstPart('W1B4BD'), "\n";
结果:
TW135BQ -> TW13
gir0aa -> GIR0AA
RG5 3SQ -> RG5
AB51 0GQ -> AB51
YO104EA -> YO10
SE154NS -> SE15
W1B4BD -> W1B
请注意:您有责任提供有效的邮政编码。
编辑:哎呀,它不包括 GIR 0AA,抱歉
【讨论】:
我没有检查过,但我很确定它会起作用。非常感谢。 :)以上是关于php获取邮政编码的第一部分的主要内容,如果未能解决你的问题,请参考以下文章
PHP中模糊查询后实现分页时,只显示第一页信息,之后的页面信息不显示,求类似问题解决方法最好有代码,谢