0
  • 正規表現 1: 3 から 6 までの数字をチェックします。

    var myRegxp = /^([0-9]){3,6}$/;
    
  • 正規表現 2: 3 から 6 までの数字をチェックします。

    var myRegxp = /^([0-9_]){3,6}$/;
    
  • 正規表現 3: 3 から 6 までの数字と をチェックしますdash

    var myRegxp = /^([0-9_-]){3,6}$/;
    

質問:

  1. これらすべてが 3 から 6 の間で一致する数に対して完全に機能するのはなぜですか?
  2. _2番目と3番目の式の(アンダースコア)はどういう意味ですか?
4

2 に答える 2

5

これらはそれぞれ、3 ~ 6 文字のシーケンスをチェックします。

1 つ目は 3 桁のみを許可します。

2 番目は 3 文字まで使用できますが、数字に加えてアンダースコアも使用できます。

3 番目は 3 文字まで使用できますが、数字に加えてアンダースコアとダッシュも使用できます。

これらが「有効」であるかどうかは、何を達成しようとしているかによって異なります。ダッシュは負の数を許可するのに役立ちますが、より厳密な正規表現ではダッシュを最初の位置に配置する必要があり、さらに 3 ~ 6 桁を追加できます。

アンダースコアに関する質問への回答として、これは 3 番目の正規表現で使用できる別の文字にすぎません。これは完全に合法的な正規表現です。


3 番目の正規表現を分析すると、次のようになります。

^一致する文字列の開始を意味します

()結果で括弧の間にあるものを個別にキャプチャすることを意味します。一致するものには影響しませんが、一致結果が返される方法に影響します。

[]これらの括弧内のすべてに一致する文字セットを示します。

[0-9]0 から 9 までの任意の文字が一致を構成する文字の範囲を示します。

[0-9_-]上記と同じ範囲を示しますが、アンダースコア文字とハイフン文字も含まれます。

{3,6}は、前の正規表現要素の 3 ~ 6 回の出現に一致させることを意味します。

$文字列の終わりを意味します


したがって、3 番目の正規表現では、文字列の先頭に続いて、数字、アンダースコア、またはハイフンの 3 ~ 6 文字が続き、その後に文字列の末尾が続きます。


例として:

"444" - matches all three
"-44" - matches the second or third
"_-4" - matches the third
"4"   - matches none

3 ~ 6 桁を許可し、正または負の正規表現が必要な場合は、次のようなものを使用します。

/^[+\-]?\d{3,6}$/

これにより、オプションで先頭にハイフンまたはプラスを付け、その後に 3 ~ 6 桁を続けることができます。

于 2013-05-05T22:14:15.327 に答える
4

は、「 から~ まで[0-9]の範囲内のもの」、つまり数字 ( で表すこともできます) を意味します。括弧はグループ化を示しますが、ここでは不要です。「前のものが3回から6回出現しなければならない」という意味です。とは、正規表現が文字列全体と一致する必要があることを示します。09\d{3,6}^$

のアンダースコア[]も、数字とともに有効な文字であることを示します。

これらはすべて有効な正規表現ですが、異なることを行います。

  • 最初のものは、3 ~ 6 桁しか使用できません。
  • 2 番目のものでは、3 ~ 6 桁の数字またはアンダースコアしか使用できません。
  • 3 番目のものでは、3 ~ 6 桁の数字、アンダースコア、またはハイフンしか使用できません。

どちらを使用するかは、有効と見なすデータによって異なります。たとえば、ハイフンが無効な場合、3 番目のハイフンはハイフンを受け入れるため、使用したくないでしょう。アンダースコアを許可しない場合は、他のすべてのアンダースコアが許可されているため、最初のものを使用することをお勧めします。数字とダッシュを許可し、アンダースコアを許可しない正規表現を作成することもできます。/^[\d-]{3,6}$/

于 2013-05-05T22:15:27.150 に答える