14

長さが正確に 17 文字の英数字であり、「AB」、「DE」、または「GH」のいずれかで始まる必要がある文字列に一致する正規表現 (JS フレーバー) を作成しようとしています。これらの 3 つの可能性の後、任意の英数字が受け入れられます。 .

マッチ:

AB163829F13246915
DET639601BA167860
GHF1973771A002957

一致しない

XYZ63829F13246915
AAA639601BA167860
BBC1973771A002957

これまでのところ、 http://regexpal.com/でテストしているこの正規表現があります

^(AB|)[a-zA-Z0-9]{17}$

最初の例と一致するためにパイプ文字が必要な理由、またはパイプの後に「DE」を追加すると失敗する理由がわかりません。

誰?

4

7 に答える 7

23

これを使って:

^(AB|DE|GH)[a-zA-Z0-9]{15}$

最初の 2 文字で既に 2 文字を占めているため、その後は 15 文字の英数字だけが必要です。

http://rubular.com/r/rAWmIy4Xeh

于 2013-05-14T16:04:46.297 に答える
5

あなたはほとんどそれを持っていました:

(AB|DE|GH)[a-zA-Z0-9]{15}

デモ

すでに 2 文字の長さになるためAB|DE|GH、15 文字だけを超えて許可する必要があります。

必要に応じて、非キャプチャ グループ ( (?:AB|DE|GH)[a-zA-Z0-9]{15}) を使用し、パターン ( ) を固定することもでき^(?:AB|DE|GH)[a-zA-Z0-9]{15}$ます。

于 2013-05-14T16:03:37.523 に答える
2

あなたはこれを試すことができます:

/^(?:AB|DE|GH)[A-Z0-9]{15}$/
于 2013-05-14T16:03:45.697 に答える
1

Your current regex is looking for a string that may or may not start with AB, followed by some alphanumeric characters. If it does start with AB, the string length will be 19. Otherwise, it's 17.

Clearly, this is not what you meant.

Try this:

/^(?=AB|DE|GH)[a-zA-Z0-9]{17}$/

This uses a lookahead assertion to ensure the string starts with the right combinaions, then effectively starts over as it counts out the 17 characters.

于 2013-05-14T16:04:12.673 に答える
0

次のことを試してください。

^(AB|DE|GH)[a-zA-Z0-9]{15}$

と一致するものは、正確に 2 文字を消費するので、文字クラス(AB|DE|GH)の繰り返しを 15 に変更する必要があります。[a-zA-Z0-9]

これも少し短縮できることに注意してください。

^(AB|DE|GH)[^\W_]{15}$

これは\W、文字、数字、およびアンダースコアを除くすべてに一致するため機能します。and\W_否定文字クラスに入れると、文字と数字のみに一致する要素が得られます。

于 2013-05-14T16:05:41.350 に答える
0

あなたのパターンでは、パイプはその最初の部分をABまたは空の文字列に一致させます。17 から 2 文字を除外していないため、次の 17 文字をパターンの残りの部分と一致させるには、空の文字列と一致する必要があります。パターンは、たとえばAB00000000000000000、つまりAB17 文字の英数字にも一致します。

最初に 2 文字、次に 15 文字の英数字の組み合わせに一致させる必要があります。

^(AB|DE|GH)[a-zA-Z0-9]{15}$
于 2013-05-14T16:06:01.900 に答える