确实牛
给你这个看看
//完整的日期验证函数
function CheckDate( str )
{
  var re=/^\d{4}-\d{1,2}-\d{1,2}$/;
  var r=str.match(re);
  if (r==null)
  {
    alert("请按以下格式填写日期: yyyy-mm-dd!");
    return false;     
  }
  else
  {
    var s=str.split("-");
    var years = parseInt(s[0]);
    var months = parseInt(s[1]);
    var days = parseInt(s[2]);
    if (parseInt(s[0].substring(0,2))<19 || months>12 || months<1 || days>31 || days<1)
    {
      alert(请填写正确的日期);
      return false
    }       
    
    switch(months)
    {
      case 2:
        if((years%4 == 0 && years%100 != 0) || (years%400 == 0))
        {
          if(days > 29)
          {
            alert(闰年二月没有+days+日!);
            return false;
          }                 
        }
        else
        {
          if(days > 28)
          {
            alert(平年二月没有+days+日!);
            return false;
          }
        }
        break;
      
      case 4:
        if(days > 30)
        {
          alert(四月没有+days+日!);
          return false;
        }
        break;
      case 6:
        if(days > 30)
        {
          alert(六月没有+days+日!);
          return false;
        }
        break;
      case 9:
        if(days > 30)
        {
          alert(九月没有+days+日!);
          return false;
        }
        break;
      case 1:
        if(days > 30)
        {
          alert(十一月没有+days+日!);
          return false;
        }
        break;
    }
    return true;
  }
}

解决方案 »

  1.   

    好像判断有问题哦。
    <script language="javascript">
    var date1="2007-05-31";
    if(isDate(date1)) 
    {alert("ok");}
    else
    {alert("no");}function isDate(str)
    {
    var sReg = "^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$";
    //alert(sReg);
    //var reg = new RegExp(sReg,"i");
    var reg = new RegExp(sReg);
    if(!reg.test(str))
    {
      return false;
    }
    return true;
    }
    </script>不管date1的日期是什么格式的,总是返回“No"
      

  2.   

    你这个也不错,但是只能验证Y-MM-DD格式,我想要的是能验证Y-MM-DD HH:MM:SS格式的,最好是正则表达式.
      

  3.   

    TO:jacklinchen(陈) 
    就是这样的,不管怎么样都不对,不知道为什么,我的写法有没有问题呢??
      

  4.   

    这个正则表达式就是考虑的全面一些。
    你把他们分组分别测试一下,在合并测试以下,就会找到问题的所在了。
    Y-MM-DD包含的几个并列表达式
    HH:MM:SS只有后面的表达式
      

  5.   

    to:jinjuduo() 
    我一直怀疑是我的测试方法有问题,
    var sReg = "";var reg = new RegExp(sReg);
    if(!reg.test(str))
    {
      return false;
    }
    return true;
    }这个流程对吗?
      

  6.   

    其实不必这么复杂,
    var str="  ";
    var reg=/正则/;
    if(!reg.test(str))
    {alert("ok")}
    else
    {alert("no")}就可以判断了
      

  7.   

    TO:jinjuduo() 
    去掉也不行啊!
      

  8.   

    var reg = new RegExp(sReg);这种定义方法
    \d需要变成\\d才行
      

  9.   

    TO jinjuduo() :
    能不能换别的方法?不用改的?
      

  10.   

    var sReg ="^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29)) (20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$";
      

  11.   

    <html>
    <head>
    <title>验证shijian函数</title>
    </head>
    <body>
    <script >
    function regex()
    {
    var regex=/^(19|20)[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])\s+(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$/g;
    var str = document.form1.name1.value;
    var result = regex.test(str);
    alert(result);
    }
    </script>
    <form name=form1>
    <input type=text name=name1 >
    <input type=button onClick="regex()" value="test">
    </form>
    </body>
    </html>
    只能验证YYYY-MM-DD HH:MM:SS格式
      

  12.   

    var isDate = function (a, b, c) {
    var a = parseInt(a), b = parseInt(b), c = parseInt(c), date = new Date(a, -- b, c);
    return (a == date.getFullYear() &&  b == date.getMonth() && c == date.getDate());
    };
    alert(isDate.apply(null, "2009-03-01".split("-")) && isDate.apply(null, "2009-02-01".split("-")));
      

  13.   

    to:jinjuduo() 
    唯一的遗憾就是:2006-02-30 12:50:29这个也能通过,没有闰月的考虑,不过也能用,我是配合时间控件来使用的!
      

  14.   

    以前有人发过一个很长的reg你可以艘下。