2012-01-02 5 views
15

は、私のようなPHPのアドレスに正規表現を使用して一致させる必要があります、するpreg_matchは、PHPの住所

  • 144通り、市、州の郵便番号/郵便番号
  • 144通りのapt#1、市、州の郵便番号/郵便番号
  • 144通りやすい#1、市状態郵便番号/郵便番号

缶は、文字および/または数字を含む郵便番号/郵便番号。ここで

は、私が試したものです:

print_r(preg_match('/^([0-9]+)\s([a-z]+)\s([a-z]+)\s([a-z]+)\s([a-z0-9]+)$/i', $t, $m)); 
print_r($m); 

それは出力:

Array 
(
    [0] => 123 asd asd asd 123 
    [1] => 123 
    [2] => street 
    [3] => city 
    [4] => state 
    [5] => zip 
) 

これはスペースのみを使用して動作します。私はコンマを持っていると動作しませんし、空の配列になります。

カンマも含めることができますか?

+0

あなたの '# 'で動作しません。あなたは上記のサンプル以外に、あなたがどんな入力を期待しているかについてもう少し正確にすることができますか? – fge

答えて

15

カンマを削除して正規表現を使用してみませんか?

また、英数字の郵便番号については、カナダの郵便番号でスペースを使用するため、a-z0-9以外の文字を追加する必要があります。通りにスペースが気に入ったかどうかをチェックする必要があります

他の事は次のとおりです。

千NWワンウェイドライブ

OR

100ルーデ・ピュプリエール

正規表現は機能しません。都市でも同じです。

APIを使用すると便利ですが、必要な国のAPIを入手する必要があります。あなたが苦しんでいる可能性があるすべての国を検証したい場合。

ceejayozは良い答えがありますが、あなたがすべきことは、入手した上位の国のAPIを取得し、それ以外のすべてのために正規表現を使用することです。

-1

[0-9]+\s(\w)*(\W)(\s?)(\w)*(\W)(#[0-9])?(\W*)(\w)*(\W)(\s?)(\w)*(\s?)(\w)*

この

+4

私は得ます:PHP警告:preg_match():未知の修飾子 '+' – Marty

1
/^([0-9]+)\s([a-z]+)(,\s|\s)([a-z]+)(,\s|\s)([a-z]+)(,\s|\s)([a-z0-9]+)$/i 

だけ変更 "\ sの" を "(、\ sは| \ sを)" してみてください空白やカンマやwhtiespaceのいずれかに一致します。それでもあなたの表現には多くの問題があります。たとえば街頭や都市名をスペースやハイフンで考えてみましょう。

0

米国郵便局には正規化API-https://www.usps.com/business/webtools.htmがあります。

regexでこれを行うのは苦しい、不便なプロセスです。多くのアドレスは通常のフォーマットに固執しません。

+2

これはアメリカにとって良いでしょう、Candaはどうですか?イギリス? – aki

+0

私はOPに米国スタイルの住所しか書いていないと思ったが、 "zip"には郵便番号以上の文字を入れることができると指定されているのがわかった。それでも、これは彼の住所のかなりの部分を助けるかもしれません。 – ceejayoz

+0

申し訳ありません質問に「米国スタイルの住所のみ」が表示されません。 – aki