1

JSで部分的な正規表現の一致を作成しようとしています。私が達成したいのは、ユーザーが入力フィールド内に何かを入力すると、正規表現の一致全体が満たされた場合だけでなく、JSは常にキーを押したときに数列の部分一致を実行することです。

したがって、これはRegExルールです。

^[12][^1-6]\d{2}$

ユーザーが番号1または2を入力すると、それは正しい一致ですが、3は正しくありません。次に、1から6までの数字が入力されていない場合、それも正しく、最後に次の2つの数字が正しくなります。私が言ったように、今のところ正規表現の一致は4つの数字すべてが入力されたときにのみ満たされます。

部分的な入力チェックを行うにはどうすればよいですか?

4

2 に答える 2

2

最も簡単な解決策は、オプションのコンポーネントを対応する(?:)?構造にラップすることです。実際には 2 つのオプション コンポーネントがあるため、それを考慮する必要があります。

結果は次のようになります...

^[12](?:[^1-6]\d{0,2})?$

...「2x」、「2x1」、「2x11」の両方に一致する必要があるようです。) したがって、{0,2}量指定子。

問題は明らかに、単一の正規表現を使用して、ユーザーがフィールドに値を入力し終えたかどうかを確認できないことです。言い換えれば、「中間」1を一致させたいが、結果1を一致させたくない場合、単一の正規表現チェックでは不可能です。)

于 2012-09-01T12:40:13.663 に答える
1

正規表現を「または」することはできますが、それは重複を意味します。

^([12]|[12][^1-6]|[12][^1-6]\d{2})$

これを分解するには:

^      From the start of the string / line
       match either
[12]   The numbers 1 or 2
|      or
[12]   The numbers 1 or 2
       followed by
[^1-6] Any character which is not the numbers 1 through 6
|      or
[12]   The numbers 1 or 2
       followed by
[^1-6] Any character which is not the numbers 1 through 6
       followed by
\d     Any number
{2}    repeated two times
$      followed by the end of the string / line

これは、次のいずれかに一致します。

1
2
1N
2N
1NXX
2NXX

N1から6までの数字ではなく、任意の数字はどこにXありますか。

注:正規表現の2番目の部分の0と7〜9の数字だけを本当に一致させたい場合は、単にに変更[^1-6]してください[07-9]

于 2012-09-01T12:45:27.587 に答える