1

配送方法から除外する必要のある郵便番号のリストがあります。

シリー諸島マン島、その他少数を除外する必要があるとします。

上記の2つの地域の場合、有効な郵便番号はIM1-IM9、IM86、IM87、IM89です。また、IM25またはIM85の場合は無効です。

次の表現を書きました。しかし、IM25やIM85でも戻ってきています。

var regex = new Regex("(PO3[0-9]|PO4[0-1]|GY[1-9]|JE[1-5]|IM[1-9]|TR[1-9])");

IM85を渡す場合、式にfalseを返す必要があります。IM1-IM9、、IM86、IM87、IM89の場合、trueを返す必要があります。

TRの郵便番号も同じです。TR1-TR27は有効な郵便番号です。TR28を与えると、falseが返されます。

'|'を使用しています 複数のパターンを分離します。これは、1つの式に複数のパターンを含める正しい方法です。

4

4 に答える 4

1

あなたは何を期待していますか?何を一致させ、何を一致させないか? そして、テストしたい文字列の例を教えてください。

パターンを「IM25」と一致させるIM[1-9]と、パターンを許可するため一致するため、有効な部分一致が得られます。それを避けたい場合(何を達成したいのかわかりません)、最初の文字の後に実際に1桁だけを許可したい場合は、「単語境界」\bを使用して、許可したいものを正確に指定します。次のようになります。

(PO3[0-9]|PO4[0-1]|GY[1-9]|JE[1-5]|IM([1-9]|8[6-9])|TR([1-9]|2[0-7]))\b

ここでRegexrを参照してください

これにより、前に 8 がある場合、「IM」部分も 2 桁目として 6-9 が可能になります。

アップデート

あなたのタスクのコンテキストが何であるかはまだ明確ではありません。有効な郵便番号のリストがあると仮定します。おそらく、郵便番号またはその最初の部分のみを抽出し(最終的には正規表現を使用できるため)、それがリストにあるかどうかを確認する方がよいでしょう。

于 2012-11-18T00:10:37.540 に答える
1

実際の検証はウィキペディアのサイトにあります... Googleには答えがあります;) http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation

(GIR 0AA)|(((A[BL]|B[ABDFHLNRSTX]?|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})
于 2012-11-18T00:53:38.637 に答える
0

私はまだあなたがもっと明確にする必要があると思います。巨大な正規表現の人として、私はあなたの正気のために、複数桁の範囲を正規表現側ではなくコード側に入れようとするべきであることを指摘したいと思います。しかし、私は個人的にこのように正規表現で遊ぶのが好きです。正規表現は一度に1文字を読み取るため、0から9までしか認識しません。10ではなく、28ではありません。以下を許可する場合:

28から347

それからそれはかなり複雑になります。言葉で表現すると、次のことを許可する必要があります。

    2桁の場合、最初の桁に2〜9を許可し、次のようにします。
      最初の桁が2の場合、2番目の桁に8/9を許可します。
      それ以外の場合、最初の桁が3〜9の場合、2番目の桁に0〜9を許可します
    Elseif Three Digits、最初のDigitに1〜3を許可し、次のようにします。
      最初の桁が3の場合、2番目の桁に0〜4を許可し、次のようにします。
        2桁目が4の場合、3桁目に0〜7を許可します。
        それ以外の場合、2番目の桁が0〜3の場合、3番目の桁に0〜9を許可します。
      それ以外の場合、最初の桁が1/2の場合、2桁目と3桁目の両方に0〜9を許可します。

次に、そのように適切な正規表現を記述して、2ペアまたは3ペアを囲む単語境界または非数字を検索できます。このタイプの問題解決を使用すると、正規表現の問題を理解できるはずです。それ以外の場合は、一致させたいものと一致させたくないものについて詳しくお知らせください。

(\b|\D)((2[89]|[3-9][0-9])(\b|\D)|(3(4[0-7]|[0-3][0-9])|[12][0-9][0-9])(\b|\D))
于 2012-11-18T00:46:17.190 に答える
0

私はアプローチを変えました。

より複雑になっている正規表現を使用する代わりに、除外された英国の郵便番号のすべての外側のコードを保存しています。

また、郵便番号に特定の外部コードが含まれている場合は、その郵便番号をリストから除外します。外部コードはこの形式です

XX-YYY
XXX-YYY
XXXX-YYY

上記のすべての形式で、X は英国の郵便番号の外向きコードを表します。

于 2012-11-28T16:43:38.173 に答える