如何用javascript中的正则判断日期

JavaScript016

如何用javascript中的正则判断日期,第1张

最简单的正则 如 : \d{4}-\d{2}-\d{2} 但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题..... 对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。 UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。 先考虑与年份无关的前三条规则,年份可统一写作 (?!0000)[0-9]{4} 下面仅考虑月和日的正则 1. 包括平年在内的所有年份的月份都包含1-28日 (0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8]) 2. 包括平年在内的所有年份除2月外都包含29和30日 (0[13-9]|1[0-2])-(29|30) 3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日 (0[13578]|1[02])-31) 合起来就是除闰年的2月29日外的其它所有日期 (?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31) 接下来考虑闰年的实现 1 : 四年一闰 ([0-9]{2}(0[48]|[2468][048]|[13579][26]) 2 : 百年不闰,四百年再闰 (0[48]|[2468][048]|[13579][26])00 3 : 合起来就是所有闰年的2月29日 ([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29) 四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则 ^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$ 考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

参考资料: http://zhidao.baidu.com/question/125006373.html

正则表达式偶不太会 给你这个参考参考 欧文一直都用这个的 嘻嘻

function CheckDate(strDate){

//var strDate = document.getElementById("date_hour").value

var reg=/^(\d{4})(\d{2})(\d{2})$/

if(!reg.test(strDate)){

alert("日期格式不正确!\n正确格式为:20040101")

return false

}

//var ss=strDate.split("/")

//var year=ss[0]

//var month=ss[1]

//var date=ss[2]

var year=strDate.substring(0,4)

var month=strDate.substring(4,6)

var date=strDate.substring(6,8)

//alert(year+month+date)

if(!checkYear(year)){return false}

if(!checkMonth(month)){return false}

if(!checkDate(year,month,date)){return false}

return true

}

function checkYear(year){

if(isNaN(parseInt(year))){

alert("年份输入有误,请重新输入!")

return false

}

else if(parseInt(year)<1950 || parseInt(year) >2050)

{

alert("年份应该在1950-2050之间!")

return false

}

else return true

}

function checkMonth(month){

if(isNaN(parseInt(month,10))){alert("月份输入有误,请重新输入!")return false}

else if(parseInt(month,10)<1 || parseInt(month,10) >12)

{ alert("月份应该在1-12之间!")

return false}

else return true

}

function checkDate(year,month,date){

var daysOfMonth=CalDays(parseInt(year),parseInt(month))

if(isNaN(parseInt(date))){alert("日期输入有误,请重新输入!")return false}

else if(parseInt(date)<1||parseInt(date)>daysOfMonth){ alert("日期应该在1-"+daysOfMonth+"之间!")return false}

else return true

}

function CalDays(year,month){

var date= new Date(year,month,0)

return date.getDate()

}

function isLeapYear(year){

if((year %4==0 &&year %100!=0) || (year %400==0)) return true

else return false

}