2

住所文字列で郵便番号を見つけて、正規表現を使用して独自の変数にする方法を考えていました.

例えば $address = '123 My Street, My Area, My City, AA11 1AA'

私が欲しい$postcode = 'AA11 1AA'

また、住所文字列から見つかった郵便番号を削除したいと考えています。

私はこれまでのところこれを持っています。

$address = strtolower(preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $data[2]));

$postcode = 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",$address,$post);
$postcode = $post;
4

5 に答える 5

1

この正規表現はあなたを助けてくれることを願っています

$address = '123 My Street, My Area, My City. AA11 1AA';

preg_match('/(.*)\.([^.]*)$/', $address, $matches);
$postcode = $matches[2];

### Output    
var_dump($matches);
array (size=3)
  0 => string '123 My Street, My Area, My City. AA11 1AA' (length=41)
  1 => string '123 My Street, My Area, My City' (length=31)
  2 => string ' AA11 1AA' (length=9)
于 2013-08-14T15:18:09.723 に答える
1

これをやり過ぎて、考えられるすべての郵便番号のバリエーションを処理したい場合は、ここで説明されているように、「公式の」英国政府データ標準の郵便番号正規表現を使用することをお勧めします: RegEx for matching UK Postcodes。次のようなものです:

$postcodeRegex = "/(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})/i";
if (preg_match($postcodeRegex, $address, $matches))
{
    $postcode = $matches[0];
}

(これは一般的な考え方を示していますが、正規表現のフレーバーが少し異なる可能性があるため、正規表現をわずかに調整する必要がある可能性があります)。

于 2013-08-14T15:16:38.210 に答える
1

文字列を「、」で分割してみてください。次に、郵便番号が結果の配列の最後の項目になります (私は php についてあまり知りませんが、それを行う方法については初めてです)。

于 2013-08-14T14:37:54.137 に答える