1

処理が必要な会計システムの文字列がいくつかあります。会計システムでは、郵便番号と市区町村を 1 つのinputフィールドに入力するオプションのみが提供されます。データは後でシステムを通じてエクスポートされ、システムxmlにインポートされphpます。

都市から郵便番号を抽出する方法を探していますが、これらはさまざまな形式で提供されるため、単純な方法substr();では機能しません

処理する必要がある値の例は次のとおりです。

1234 ZC ALPHEN AAN DEN RIJN
1234SG UTRECHT
33602 BIELEFELD
W7 3QB LONDON

これらのそれぞれについて、郵便番号を都市から分割するにはどうすればよいですか? すでに会計システムの製造元に連絡しましたが、彼らは私の問題を理解しており、将来の呼び出しのために値を 2 つに分割することを検討していますが、それには時間がかかります。

4

2 に答える 2

2

このデータを保存して Google マップに表示する場合を除き、Google の利用規約に準拠していませんが、Google はこのようなことが得意なので、その力を利用したくなります。

Geocoding API は、さまざまな地名 ("London"、"Londres" )。

へのリクエスト

http://maps.googleapis.com/maps/api/geocode/json?address=2408%20ZC%20ALPHEN%20AAN%20DEN%20RIJN&sensor=false

特に以下を含む JSON ストリームを返します。

 "address_components" : [
        {
           "long_name" : "2408 ZB",
           "short_name" : "2408 ZB",
           "types" : [ "postal_code" ]
        },
        {
           "long_name" : "Alphen aan den Rijn",
           "short_name" : "Alphen aan den Rijn",
           "types" : [ "locality", "political" ]
        },
 ...

このページでは、サービスを使用するための要件と制限について説明します。

データがわずかに間違っている場合、Google API は何かを推測することに注意してください。あなたの最初の例1234 ZCは正しくなく、API はあなたが扱うものを提供しようとして補間します。API が誤ったデータにどのように反応するかを確認し、その結果で自分自身を撃たないように注意してください。

于 2013-07-01T14:38:15.233 に答える
0

郵便番号を都市から分割しようとしている時点で国がわかっている場合は、それを使用して、郵便番号を解析する正しい方法に対応する正規表現 (または同様のデータ) を検索できます。

たとえば、国を配列内の正規表現にマップできます (これらの正規表現は単なるサンプルであり、厳密にはテストされていません)。

$regexMap = array(
    'US' => '(\d{5}|\d{5}-\d{4}|\d{9})\s+(.*)',
    'UK' => '([\d\w]{2,4}\s+\d\w{2})\s+(.*)',
    ...
);

$regularExpression = $regexMap[$country];
preg_match($regularExpression, $incomingPostalCodeAndCity, $postalData);
$postalCode = $postalData[0];
$city = $postalData[1];

おそらくいくつかの (多くの?) 国の正規表現を組み合わせることができますが、郵便番号はかなり異なるため、かなり長い正規表現のリストが必要になるでしょう。

各正規表現は、郵便番号を最初のサブパターンとして返し、都市を 2 番目のサブパターンとして返すように設計する必要があります。

この質問への回答には、いくつかの関連情報があります:究極の郵便番号と郵便番号とは何ですか? (さまざまな国の郵便番号の正規表現のリストを含む)。

于 2013-07-01T14:52:16.697 に答える