2012-04-08 20 views
0

我希望做的是严格的搜索月份一月二月三月四月...等输入到格式化为严格的搜索字符串来验证月份在JavaScript

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”我想如果我做到了这样,用户可以输入要么全部小写或全部大写和它会验证,但不管我做什么,错误都会出现。

任何帮助,将不胜感激。

+1

的代码以某种方式不完整的......是什么的'else'属于哪一种? – Imp 2012-04-08 03:13:15

+1

我只是以小写形式创建一个月数组,然后使用[.toLowerCase()](https://developer.mozilla.org/zh/JavaScript/Reference/Global_Objects/String/toLowerCase)来搜索和比较。 – j08691 2012-04-08 03:15:14

+0

@Imp我的道歉代码inbetween,我拿出来为你更容易阅读,这就是为什么theres其他如果有 和j08691谢谢 – Umeed 2012-04-08 03:19:49

回答

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 
    } 
} 
+0

这是我来到的结论,完全忘了更新这个页面。谢谢Nick – Umeed 2012-04-08 21:41:33

0

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

var firstM = month.substr(0, 3); 
1

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

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

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

months[check]将返回truthy值,如果前三个字母匹配的对象的东西。

+0

我应该把它放入一个数组,所以我可以包括所有月份?因为用户不应该被允许放置类似“FJR”的东西。 – Umeed 2012-04-08 03:26:10

+0

好吧,所以我试了一下......它验证当我进入Jan1993,但不是如果我输入Jan/Jan ...我做错了什么? – Umeed 2012-04-08 03:39:33

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 
    } 
} 
+0

不幸的是,我不能使用正则表达,否则那里会让生活更轻松,更清洁。但是谢谢你 – Umeed 2012-04-08 03:41:56