2013-06-09 16 views
8

私は英国の郵便番号を検証することができるようしているよ、と理想的に、私は渡すために、次の例のようになる:英国の郵便番号の正規表現

  1. W1
  2. W12
  3. WC1
  4. WC1A
  5. WC12
  6. W1 6BT
  7. W12 6BT
  8. WC1 6BT
  9. WC1A 6BT
  10. WC12 6BT
  11. W16BT
  12. W126BT
  13. WC16BT
  14. WC1A6BT
  15. WC126BT

私は、次の正規表現のパターンがあります。

^(GIR 0AA)|(((A[BL]|B[ABDHLNRSTX]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|((E|N|NW|SE|SW|W)1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|(SW|W)([2-9]|[1-9][0-9])|EC[1-9][0-9])([0-9][ABD-HJLNP-UW-Z]{2})?)$ 

このパターンでは、3または4の& 6桁または7桁のポストコードが使用できます(3桁または4桁の外向きコード、または6桁または7桁の全ポストコード)。ただし、ポイント4および6(ポストコード

^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKPS-UW]) {0,1}[0-9][ABD-HJLNP-UW-Z]{2})$ 

このパターンは外側のコードのみ)

(スペースなしで私たちと、6つのまたは7桁の郵便番号を可能にし、ではなく、不完全な郵便番号のための:スペース)が省略されているところ

私も、このパターンを持っています

申し訳ありません王はすでにここで広範囲にカバーされている質問ですが、私が見つけたすべての例は、私の要件の一部と一致しますが、すべてではありません。

理想的には、3桁、4桁、6桁の数字を使用できる正規表現パターンが必要です。& 7桁のポストコード

UPDATE:私はそれが最初に完全に包括的だったとは思わないように私は私のパスケースを行ってきた再

。それは英国の郵便番号のパターンをたどると、以下の組み合わせのいずれかを検証する必要がありますされ、基本的な考え方:

1 Letter 1 Number 
1 Letter 2 Numbers 
2 Letters 1 Number 
2 Letters 1 Number 1 Letter 
2 Letters 2 Numbers 
1 Letter 1 Number (OptionalSpace) 1 Number 2 Letters 
1 Letter 2 Numbers (OptionalSpace) 1 Number 2 Letters 
2 Letters 1 Number (OptionalSpace) 1 Number 2 Letters 
2 Letters 1 Number 1 Letter (OptionalSpace) 1 Number 2 Letters 
2 Letters 2 Numbers (OptionalSpace) 1 Number 2 Letters 

^は、上記の理にかなって、十分な詳細であると思います。私は知っているビットを読みにくい。

ANSWER:

だから私は今、(例えば、パターン)の上にすべてのケースを渡し正規表現を持っています。以下のコメントで述べたように、それは非常に難しい、ALL英国の郵便番号に対応するために不可能ではないが、それにもかかわらず、以下のいずれかが、私は必要なすべてを行い、入力された症例の90%が良いことがあります:

^(GIR 0AA)|[a-z-[qvx]](?:\d|\d{2}|[a-z-[qvx]]\d|[a-z-[qvx]]\d[a-z-[qvx]]|[a-z-[qvx]]\d{2})(?:\s?\d[a-z-[qvx]]{2})?$ 
+0

この[質問](http://stackoverflow.com/q/15960184/)を見て、それはいくつかのインスピレーションのための答えです。また、スペースについてあまり心配しないでください、あなたはプロセスを楽にするためにそれらを取り除くことができます! – HamZa

+0

ああ、それは問題だ、トップはスペース付きのポストコードしか許さない。それ以外の方法であれば、間違いなくスペースを取り除くことができます。しかし、どこにスペースがないかを考えるのはちょっと難しいです。しかし、ありがとう! :) – JustinMoser

+1

これを実行しようとすると、失敗する可能性があります。英国の郵便番号とGirobank、GIR 0AA、海外の領土、BFPO全体の数多くの特別な事例を検証するための正規表現(これは現在変更中ですが、https:// www。 gov.uk/government/publications/british-forces-post-office-locations)。同様に、多くの国で同じスタイルが使用されているため、検証に大きな問題を引き起こす可能性があります。最も簡単なことは、コードポイントが公開されているような公式データを使ってルックアップを作成することです。http://www.ordnancesurvey.co.uk/oswebsite/products/code-point-open – Ben

答えて

5

はあなたをしました関連する質問UK Postcode Regex (Comprehensive)?英国政府によって供給

正規表現されました:ウィキペディアの議論に指摘したように

(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}) 

が、これはいくつかの非現実の郵便番号を許可します(例えば、それらの開始AA、ZY)と、彼らはより多くを提供しますあなたが試みることができる厳しいテスト。

+0

答えとしてマークされた正規表現では、外字コードだけのポストコードまたはスペースのない完全なポストコードは許可されません。 "SW11 9PT"は有効となりますが、 "SW12"、 "CR5"、 "SW129PT"、または "CR52EP"は有効になりません。その答えに対するコメントはスペースの問題を解決しますが、3桁または4桁の外向きコードしか使用できません。私は投稿する前にその答えを見ましたが、質問は言う通り、提案のどれもそれをすべて行いません。とにかくありがとう:) – JustinMoser

+0

私はそのページ上のすべての正規表現を試して、全く仕事をしていない。 3桁と4桁のアウターのみ(文字と数字を含む)、6または7のフル(スペースの有無にかかわらず)は検証する必要があります。私はそれが有効な郵便番号かどうか心配しない、私は事実の後に手動でそれをチェックすることができます、私はちょうど町/エリア名ではなく入力されている郵便番号であることを確認する必要があります。 – JustinMoser

+0

あなたのRegexが間違っているようですが、リンクしているWikipediaの質問によると、「構造がA9Aから始まるときは、3番目の位置に表示される唯一の文字はABCDEFGHJKPSTUWです。あなたの答えでPが見つからない! – LeBaptiste