rt ,不能输入2011-1-4这样的,包括对2月只有28天的验证,谢谢

解决方案 »

  1.   

    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))
      

  2.   

    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'))
      

  3.   

    不能上网  只能上csdn 之类的
      

  4.   

    这个基本正确 唯一的bug是|[3579][26])00))-02-29)/这里的[3579]少了个1 
    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))$/;
      

  5.   

    try...var reg = /^(?:(?!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)$/;