0

我想做的是严格搜索月份 jan feb mar apr ...等输入到格式为的文本字段中

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";
        }

我仍然习惯于弄清楚如何将 .charAt 与“jan”一起使用:“JAN”我想如果我这样做,用户可以输入全部小写或全部大写,它会验证,但是错误无论我做什么,都会不断出现。

任何帮助,将不胜感激。

4

4 回答 4

1

根据文档,charAt只接受一个参数并返回一个长度为 1 的字符串。您正在寻找的是substringtoLowerCase

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

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

months[check]如果前三个字母与您的对象中的某些内容匹配,则将返回一个真实值。

于 2012-04-08T03:15:19.413 回答
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 回答
0

charAt()返回指定位置的字符,而不是子字符串,我不知道你是如何得到的month,但如果你想取前 3 个字符,请使用substr

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