0

私は自分でこれに取り組むのに十分な正規表現について本当に知りませんので...

私はgeolocationAPIで遊んでいます。私の目標は、訪問者の所在について大まかなアイデアを得て、その特定のエリアで提供されているサービスを一覧表示できるようにすることです。

これは、郵便番号文字列の先頭部分を介して行われます。例n17 9ht、私の興味はn17

それはすべて公平ですが、私はchromeとIE9で異なる出力を取得します。Firefoxの方がはるかに優れており、postalCode文字列を自動的に返します。

  • クロム:2 Castlebar Park, London, Greater London W5 1BX, UK
  • ie9:3-6 Mt Ave, London Borough of Ealing, London W5, UK

これらはどちらも私の住所ではありませんが、W5は正しいです。

問題は、与えられている2つの可能な文字列からW5だけを抽出するにはどうすればよいですか?

明らかに、文字列はによって分割されている,ので、次のような文字列からW5(または英国の郵便番号の先頭部分)を取得することを検討しています。

  • Greater London W5 1BX
  • London W5

郵便番号の2つの部分の間に常にスペースがあります(2番目が指定されている場合)。

私はBFPO/GIRのケースを気にしないので、それはほとんどパート1にすぎません。これは、n1またはと同じくらい単純な場合がありますec3a。したがって、私が考えるように、ロジックは次のようになります。

  1. 郵便番号の全部または一部を抽出します。
  2. パート1(または唯一のパート)を取り、それを渡します。

助けていただければ幸いです。

4

2 に答える 2

2

これは、ウィキペディアの記事(部分を含む)によると、すべての英国の郵便番号構文をサポートする最も長い正規表現の1つです。

([A-Z]?\d(:? \d[A-Z]{2})?|[A-Z]\d{2}(:? \d[A-Z]{2})?|[A-Z]{2}\d(:? \d[A-Z]{2})?|[A-Z]{2}\d{2}(:? \d[A-Z]{2})?|[A-Z]\d[A-Z](:? \d[A-Z]{2})?|[A-Z]{2}\d[A-Z](:? \d[A-Z]{2})?),\s*UK$

私はそれを適切にテストしませんでしたが、少なくともあなたのケースでは機能します。

于 2011-12-28T11:39:57.910 に答える
1

私は英国の郵便番号に精通していませんが、住所の他の部分をすでに削除しているため、住所を次のように絞り込んだとおっしゃっているようです。

[Some words] [several-character code] [optional three-character code]

そして、2文字のコードが必要です。それが正しければ、おそらく次のような正規表現です。

/\s([^\s]{2,4})(?:\s...)?$/

次に、必要なビットが次のように返され.match()ます。

var addressPart = "Greater London W5 1BX",

alert(addressPart.match(/\s([^\s]{2,4})(?:\s...)?$/)[1]); // "W5"

(もちろん、実際にからの戻り値をテストして.match()、それが機能することを確認できますが、機能する場合は、必要なビットが一致配列の2番目の要素になります。)

危険なデモ: http: //jsfiddle.net/HjD7w/1/

編集:都市名の最後の単語が郵便番号の最初の部分と間違えられる可能性があるため、これはうまく機能しないと思いますが、郵便番号に英字と数字がどのように収まるかについての固定規則がある場合は、それを修正することができます。(ルールはわかりませんが。)

于 2011-12-28T11:37:59.810 に答える