-1

正規表現を使用して、大文字と小文字に関係なく、ユーザーが指定した値が承認された値のリストに存在するかどうかを判断したいと思います。現在の JavaScript コードの簡略化された例を次に示します。これは、「JAN」、「Jan」、および「jan」に一致するように機能しますが、「jAN」、「jAn」などには一致しません。

var validateValue = function(field, patternName){
    "use strict"; //let's avoid tom-foolery in this function
    var pattern="";

    switch(patternName)
    {
    case "MMM": //month names only
        pattern=/^JAN|Jan|jan*$/;
        break;
    // other cases  and default follow in real code
    }

    if ( (!field.value.length) || pattern.test(field.value) ){
        //we're good (the field is blank or passes the regular expression test); remove field's error message, enable the submit button
    }
    else {
        //problems; let's show the error message and put focus back on problem field, disable the submit button
    }
};

「 RegexOptions列挙を使用せずに大文字と小文字を区別しない正規表現」から学んだことに基づいてpattern=/^(?i)試しましたが、それではうまくいきません(「Uncaught SyntaxError:無効な正規表現...」)JAN|Jan|jan*$/;

大文字と小文字を区別しない値がリスト項目に一致するかどうかを評価するための正しい正規表現は何ですか?

4

2 に答える 2

10

i次のように(大文字と小文字を区別しない) 修飾子を使用できます。

pattern = /^jan*$/i; // <-- it goes at the end

正規表現を定義する別の方法は、RegExpオブジェクトを使用することです。

pattern = new RegExp("^jan*$", "i");

このフォームの方が読みやすいと思います。


また、次の/^jan*$/iようなものと一致することに注意してください。

JAN
jannnn
jannNN
jAn

それがあなたの望むものかどうかはわかりません。


定義済みのセットに一致させたいだけの場合は、正規表現以外のソリューションを選択できます。

function isMonth(value) {
    var months = "jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec".split("|");
    return months.indexOf(value.toLowerCase()) !== -1;
}
于 2013-04-04T15:28:21.480 に答える
3

正規表現オプションを使用したくない場合は、次の正規表現を試すことができます。

pattern = /^[Jj][Aa][Nn]$/
于 2013-04-04T15:30:16.227 に答える