2012-12-07 39 views
1

我有一个日期字段,例如dd/mm/yyyy。我已验证的代码,不会允许用户进行一旦日期不是正确的格式dd/mm/yyyy简单的Javascript验证

我想要做的是有一个新的字段,具有默认值dd/mm/yyyy在现场。我希望用户能够以dd/mm/yyyy离开此字段并继续,否则,如果他们在字段中输入了其他任何内容,则需要将其作为有效日期。因此接受dd/mm/yyyy并且任何有效日期例如2012年12月12日

else if(!validateDate(document.lending.date.value)){alert("Please enter a valid date. The date must be of the format dd/mm/yyyy");document.lending.date.focus();return false;}               




function validateDate(thedate){ 
if(thedate.length <11) 
    { 
try{ 
    day = thedate.substring(0,2); 
    mmonth = thedate.substring(3,5); 
    year = thedate.substring(6,10); 
    if((thedate.charAt(2)!="/") || (thedate.charAt(5)!="/") || (day<1) || (day>31) ||  (mmonth<1) || (mmonth>12) || (year<1999) || (year>9999) ||  (!validateNumberWithoutDecimal(day)) || (!validateNumberWithoutDecimal(mmonth)) ||  (!validateNumberWithoutDecimal(year))) 
    { 
     return false; 
    } 
    else 
    return true; 
}catch(e){return false;} 
} 
else 
return false; 

} 

我想编写一个新的功能validateMyNewDate和这样做的,使其接受DD/MM/YYYY藏汉作为确认的日期。现在我的逻辑有点混乱。

+0

它取决于你的功能需要多么聪明(如检测二月的日子?)。由于你现在还没有检测到二维码,所以你最好的办法就是像regex一样对日期进行regexing:/ ^(0?[1-9] | [12] [0-9] | 3 [01])[ - ](0?[1-9] | 1 [012])[\/\ - ] \ d {4} $ /(可能是01/12/2012和01-12-2012 – Najzero

回答

4

您可以尝试使用Date构造,而不是验证:

var isValidDate = function(str) { 
    return !!new Date(str).getTime(); 
} 

应该为 'DD/MM/YYYY' 格式工作,f.ex:

isValidDate('12/12/1999'); // true 
isValidDate('12/52/1999'); // false 

如果你想确保用户使用的精确“DD/MM/YYYY”格式,你可以用正则表达式结合起来:

更新:补充所以它也valida测试默认输入“dd/mm/yyyy”。

var isValidDate = function(str) { 
    return str == 'dd/mm/yyyy' || 
      (/^\d{2}\/\d{2}\/\d{4}$/.test(str) && new Date(str).getTime()); 
} 
+0

嗨,感谢我很满意我所有的代码中的validateDate函数,但我希望用户能够输入“dd/mm/yyyy”或有效日期,所以如果字段保留为dd/mm/yyyy这将是毫无疑问,请在有效的日期,希望这是有道理的。谢谢 – topcat3

+0

@ topcat3喜欢'placeholder'属性? – David

+0

是的,该字段有默认值dd/mm/yyyy完全像这样写。能够点击下一个甚至不改变这个字段,但如果他们改变它,它验证日期。谢谢 – topcat3