データベースを使用した検索計算のために、郵便番号の最初の部分を抽出する必要があります。何か案は?!サイトに検索モジュールを実装するためにこれが必要です。検索モジュールは、郵便番号に従っていくつかの関連情報を探します。しかし、私が郵便番号用に持っているデータベースには、郵便番号の2番目の部分はなく、最初の部分だけがあります。その英国の郵便番号。だから、何かアイデアはありますか?!
2580 次
1 に答える
9
これは、考えられるすべての英国の郵便番号を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*?(\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をカバーしていません、ごめんなさい
于 2011-06-11T20:45:09.533 に答える