php获取邮政编码的第一部分


php get the first part of postcode

我需要提取邮政编码的第一部分,以便使用数据库进行搜索计算。有什么想法吗?!我需要这个来在网站上实现一个搜索模块,它根据帖子代码查找一些相关信息。但是我的邮政编码数据库没有邮政编码的第二部分,只有第一部分。它是英国的邮政编码。那么,有什么想法吗?!

这不会覆盖所有可能的英国邮政编码,但会覆盖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*?('d{1,4})$/i', $postcode))
        return preg_replace('/^(BFPO)'s*?('d{1,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,对不起