Javascript SubString验证/比较

时间:2014-04-13 06:08:14

标签: javascript substring

我已经用这段代码摆弄了大约一个小时了,这令人难以置信。我认为解决方案相当简单,但我似乎无法弄明白。 无论如何这里去了。我创建了一个javascript函数,用于检查用户输入的字符,以便它只能接受7个字符作为有效条目。这部分工作正常。什么不起作用是下一部分,然后它检查前三个字符,看看它们是否与一年中的几个月匹配,如果没有,它不会通过。到目前为止,即使输入的字符是jan2345或feb3939等等,它也永远不会返回true,依此类推。任何帮助都会很好,这是有问题的代码。

 function validateBirthDate() {
 var s =document.pizza.birthday.value; 
 var check=/[A-Za-z]{3}[0-9]{4}/;

 if(s.length<7 || s.length > 7) {
  alert("The birth date should have 7 characters!");
  return false;
}
 if(s.length==7) {
  if(check.test(s)==true) {
   if(s.substring(0,3)!=="jan" || s.substring(0,3)!=="feb" ||     s.substring(0,3)!=="mar"|| s.substring(0,3)!=="apr"  || s.substring(0,3)!=="may" ||     s.substring(0,3)!=="jun" || s.substring(0,3)!=="jul" || s.substring(0,3)!=="aug" ||     s.substring(0,3)!=="sep" || s.substring(0,3)!=="oct" || s.substring(0,3)!=="nov" ||     s.substring(0,3)!=="dec") 
  {
    alert("The first 3 characters must be a 3 letter abbreviation of one of the 12     months!");
    return false;
   }  

2 个答案:

答案 0 :(得分:-1)

逻辑就是问题

!(s.substring(0,3)=="jan" || s.substring(0,3)=="feb")

答案 1 :(得分:-1)

您不应该使用||您应该使用&&。如果s"jan",则它不等于"feb",因此alert将会触发。

您还可以执行以下操作:

var months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
if (months.indexOf(s.substring(0,3)) === -1) {
    alert();
}

if (!/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/i.test(s.substring(0,3))) {
    alert();
}

但是对于它的价值,这听起来像是获得有效日期输入的可怕方式。 有三个输入,一个用于一天,一个用于一个月,一个用于一年,并将可能的输入值限制为有效输入值。或者更好的是,<input>type=date一起使用 - 尽管这会限制浏览器支持。某种插件可能是你最好的选择。

相关问题