0

私がやりたいのは、次のようにフォーマットされたテキストフィールドに入力された月 jan feb mar apr ...etc の厳密な検索です

mmmyyyy (例: jan1993)。

ユーザーがすべて小文字またはすべて大文字 (jan/JAN) を入力できるように、これを検証したいと思います。

私がしたことはうまくいかないようです。

     var firstM =month.charAt(0,2);
     var months = 
         {
           "jan" : "JAN",
           "feb" : "FEB",
           "mar" : "MAR",
           "apr" : "APR",
           "may" : "MAY", 
           "jun" : "JUN",
           "jul" : "JUL",
           "aug" : "AUG",
           "sep" : "SEP",
           "oct" : "OCT",
           "nov" : "NOV",
           "dec" : "DEC"
         };



 else if (firstM !== months[firstM])
        {
          errMessages += "<li class='b1'> Date of Birth must start with 3 letter month</li>\n";
          errMessages += "<li class='b2'> ex: mmmyyy / JAN1993</li>\n";
        }

私はまだ「jan」で.charAtを利用する方法を理解することに慣れています:「JAN」私はこのようにした場合、ユーザーはすべて小文字またはすべて大文字を入力でき、それは検証されますが、エラー私が何をしても出続ける。

どんな助けでも大歓迎です。

4

4 に答える 4

1

コードを単純化するために、正規表現を使用できますか?

function checkInput(input) {
   var months = /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i;

   if (months.test(input) == false) {
    // TODO: Show validation error message
   }
}
于 2012-04-08T03:41:05.550 に答える
1

正規表現がない場合、関数は次のようになります。

function checkInput(input) {
    var months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];

    var monthPartOfInput = input.substring(0, 3).toLowerCase();                         

    if (months.indexOf(monthPartOfInput) == -1){
        // TODO: Show validation error
    }
}
于 2012-04-08T21:37:20.327 に答える
1

ドキュメントによると、charAtパラメータを 1 つだけ取り、長さ 1 の文字列を返します。あなたが探しているのはsubstringtoLowerCase

var month = "January",
    check = month.toLowerCase().substring(0, 3);

if( months[check] ) {
   //valid month
}

months[check]最初の 3 文字がオブジェクト内の何かと一致する場合、真の値を返します。

于 2012-04-08T03:15:19.413 に答える
0

charAt()部分文字列ではなく、指定された位置の文字を返します。取得方法がわかりませんがmonth、最初の 3 文字を取得したい場合は、substr

var firstM = month.substr(0, 3);
于 2012-04-08T03:14:42.907 に答える