2017-02-05 8 views
2

が有効な郵便番号のリストです:検証、英国の郵便番号の下

A1 1AA 
A11 1AA 
AA1 1AA 
AA11 1AA 
A1A 1AA 
BFPO 1 
BFPO 11 
BFPO 111 

私は(([A-Z]{1,2}[0-9]{1,2})\ ([0-9][A-Z]{2}))|(GIR\ 0AA)$と試みたが、それは動作しません。すべての郵便番号形式を検証するための適切なクエリを私に教えてください。

+0

「BFPO 1」も「BFPO 11」も有効な英国の郵便番号ではありません。内側の部分はちょうど3文字です。 – Schwern

+0

'BFPO 111'も有効ではないため、内側の部分は常に2文字で終わります。 – Schwern

+0

スペースをエスケープする必要はありません。次に、1つまたは2つの文字の後ろに1つまたは2つの数字が続いています。つまり、正しいパターンではありません(例の中にA1A 1AAがありますが、数字で終わらない)。 – mathguy

答えて

2

まず、手元のデータセットに基づいて推測するのではなく、let's look at what UK postcodes are

EC1V 9HQ

最初の1文字または2文字は、郵便番号のエリアであり、メールを処理するメインロイヤルメールの並べ替え事務所を特定します。この場合、ECはロンドンのMount Pleasantソーティングオフィスに行きます。

通常、2番目の部分は1つまたは2つの数字ですが、ロンドンの一部の場合は数字と文字にすることができます。これは郵便番号の区域であり、郵便物がどの郵便配達先に行くべきであるかを選別オフィスに伝える。

この第3の部分はセクタであり、通常は1つの数値です。これは郵便物がどこに行くべきか地方の区域か近所を配達オフィスに伝えます。

郵便番号の最後の部分は、常に2文字の単位コードです。これは、最大80の住所のグループを識別し、どの郵便経路(または徒歩)が商品を配送するかを配送業者に通知する。その...

  1. 1または2文字を消化

  • 数字と多分英数字です。
  • スペース。
  • 「通常は数字ですが、それ以外のインスタンスは見つかりません。
  • 2文字。それは、アンダースコアが含まれているため
    \A[[:alpha:]]{1,2}\d[[:alnum:]]? \d[[:alpha:]]{2}\z 
    

  • 我々は \wを使用することはできません。

    Iは^$がラインの最初と最後に一致一方、文字列の正確な始まりと終わりと一致\z\Aため^$にわたってより正確\A\zを使用。特に、$は改行改行を許容します。


    もちろん、特殊なケースがあります。 XXXX 1ZZ、海外のさまざまな地域でXXXXが列挙されています。

    \A(ASCN|STHL|TDCU|BBND|BIQQ|FIQQ|PCRN|SIQQ|TKCA) 1ZZ\z 
    

    本当に特殊なケースが2つあります。

    • GirobankのGIR 0AA。
    • アンギラ用AI-2640。
    \A(AI-2640|GIR 0AA)\z 
    

    一つの大きな(...|...|...)混乱の中に一緒にすべてを置きます。クエリーを3つの部分に作成し、x修飾子を使用して空白を無視するとよいでしょう。

    REGEXP_LIKE(
        postcode, 
        '\A 
        (
         [[:alpha:]]{1,2}\d[[:alnum:]]?\ \d[[:alpha:]]{2}\z | 
         (ASCN|STHL|TDCU|BBND|BIQQ|FIQQ|PCRN|SIQQ|TKCA)\ 1ZZ | 
         (AI-2640|GIR\ 0AA) 
        ) 
        \z', 
        'x' 
    ) 
    

    また、基本正規表現をあまり厳しくすることも、最初の部分の2〜4英数字を受け入れることもできます。その後、Anguillaが心配するのは特別なケースだけです。下がり気味で

    \A([[:alnum:]]{2,4} \d[[:alpha:]]{2}|AI-2640)\z 
    

    、これは存在しないポストコードにできるようになります。上手くいって、追加の特別なケースを調整する必要はありません。これはおそらく、このレベルのフィルタリングでは問題ありません。

    +0

    http://docs.oracle.com/database/121/SQLRF/ap_posix003.htm#SQLRF55544によれば、 '\ z'はサポートされていません(ただし、' \ Z'は '\ z'が意味するものを意味し、' \ A'は奇妙です)。 – melpomene

    +0

    http://docs.oracle.com/database/121/SQLRF/ap_posix001.htm#SQLRF55540によれば、 '[:' ':]'がサポートされています。 http://docs.oracle.com/database/121/SQLRF/functions162​​.htm#SQLRF06300は、例で '[[:alpha:]]'を使用しています(ただし '[s | r | p]'は's'や' r'や 'p'とマッチするので、どのように信頼できるか分かりません)。 – melpomene

    +0

    ドキュメントのGoogle-ingは、この返信を書くよりもはるかに時間がかかりました。 https://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_regexp.htm#CHDJGBGG – mathguy

    関連する問題