function checkdt(datestr) { var regex = /^(\d{1,4})(-|\/|.)(\d{1,2})\2(\d{1,2})$/; if(!regex.test(datestr) || !isDate(datestr)) return false else return true;
function isDate(s){ var s = s.replace(/\-|\/|\./g,"/"); var p = s.split("/"); var y = parseInt(p[0]); var m = parseInt(p[1]) - 1; var d = parseInt(p[2]); var a = new Date(y,m,d); if(a.getFullYear()!=y || a.getMonth()!=m || a.getDate() != d) return false; else return true; } }var str = "2011-2-29"; alert(checkdt(str))
var regex = /(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)/; alert(regex.test('2011-02-28')) alert(regex.test('2011-02-29')) alert(regex.test('2011-2-28'))
{
var regex = /^(\d{1,4})(-|\/|.)(\d{1,2})\2(\d{1,2})$/;
if(!regex.test(datestr) || !isDate(datestr)) return false
else return true;
function isDate(s){
var s = s.replace(/\-|\/|\./g,"/");
var p = s.split("/");
var y = parseInt(p[0]);
var m = parseInt(p[1]) - 1;
var d = parseInt(p[2]);
var a = new Date(y,m,d);
if(a.getFullYear()!=y || a.getMonth()!=m || a.getDate() != d) return false;
else return true;
}
}var str = "2011-2-29";
alert(checkdt(str))
alert(regex.test('2011-02-29'))
alert(regex.test('2011-2-28'))
12 16也能整除4 还有就是括号太多 应该弄成非捕获性分组
我也贴一个
/^(?:(?:[0-9]{4}-(?:(?:(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:02-(?:0[1-9]|1[0-9]|2[0-8]))))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26]))|(?:(?:0[48]|[2468][048]|[13579][26])00)-02-29))$/;