0

こんにちは、これまで正規表現を使用したのは初めてで、ユーザーが入力した変数を取得して、AZ、az、0-9、および _ に制限されているかどうかを確認しようとしています。

これは私がこれまでに持っているコードです:

function validateCSV(x){
    var y = document.getElementById('column').value;
    var pattern = new RegExp('^\b\w\b$');
    if(!pattern.test(y)){
       alert("Use only A-Z, a-z, 0-9, or _ in column names.");
       return false;
    }
}

\w を使用すると、任意の英数字とアンダースコアに一致しますが、空白は一致しないことがわかっている限り、これはまさに私が望んでいたことです。ただし、test1 や test のようなものしか持っていない場合でも、アラートがポップアップして続行できないため、正しく動作していないようです。この件に関する情報をいただければ幸いです。

4

3 に答える 3

6

量指定子がありません。正規表現リテラルを使用する必要があります。

/^\w+$/
于 2013-06-26T20:42:11.557 に答える
3

現在の正規表現は、単一の単語文字を探しています (定義\bにより、一致の開始時と終了時に使用すると true にアサートされます)。

あなたが探している正規表現は/^[a-z0-9_]+$/i

そのためにさまざまなものを使用できることに注意してください+

  • +1 つ以上の文字
  • *0 個以上の文字。基本的には と同じ+ですが、空の文字列も使用できます
  • {5}正確に 5 文字
  • {3,16}3 ~ 16 文字 (両端を含む)

必要に応じて変更してください!

于 2013-06-26T20:43:25.570 に答える
1

問題は、正規表現を文字列リテラルから定義していることです。つまり、バックスラッシュをエスケープする必要があります。必要なもの:

new RegExp('^\\b\\w\\b$');

または、正規表現リテラルを使用します。

var pattern = /^\b\w\b$/;

これは次の問題につながります。正規表現は単一の\w文字に一致します。それに続く必要があるのは*、ゼロ以上に一致する場合、または+1 つ以上に一致する場合です。

そして、\b部品はまったく必要ありません:

var pattern = /^\w*$/;

デモ: http://jsfiddle.net/VFyug/

一般に、文字列を使用して正規表現を定義することはnew RegExp()、正規表現リテラルよりも扱いにくいため、ユーザーが入力したテキストを含める必要があるため、正規表現が実際に文字列変数から来ている場合にのみ使用します。

于 2013-06-26T20:50:39.837 に答える