function dateVerify(date){ 
        var reg = /^(\d{4})([\/,-])(\d{1,2})\2(\d{1,2})$/; 
        var r = date.match(reg); 
        if(r==null) return false; 
        var d= new Date(r[1], r[3]-1,r[4]); 
        var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate(); 
        date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1); 
        return newStr==date; 
    }

解决方案 »

  1.   

    /^\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{2}:\d{2}$/
      

  2.   

    <script language=javascript>
    String.prototype.isTime = function()
    {
      var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/); 
      if(r==null)return false; var d = new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]); 
      return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
    }
    alert("2002-1-31 12:34:56".isTime());
    alert("2001-2-29 12:54:56".isTime());
    alert("2002-1-41 12:00:00".isTime());
    </script>
      

  3.   

    to meizz(梅花雪)
       ^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$
    我刚才针对这段正则表达式测试了一下
    1、校验内容不为空 的功能实现了
    2、格式必须符合日期+时间(YYYY-MM-DD HH:MM:SS)格式 的功能没有实现。
       比如:我输入2005-10-11 17:80:30 也可以校验通过
      

  4.   

    /* -- 计算两个字符(YYYY-MM-DD)的日期相隔天数 -- */
    function Date_Compare(asStartDate,asEndDate){
     var miStart = Date.parse(asStartDate.replace(/\-/g, '/'));
     var miEnd   = Date.parse(asEndDate.replace(/\-/g, '/'));
     return (miEnd-miStart)/(1000*24*3600);
    }      /*-- 判断一个字符串(YYYY-MM-DD)的日期是否正确 -- */
    function Date_istrue(asDate){
     var lsDate  = asDate + "";
     var loDate  = lsDate.split("-");
     if (loDate.length!=3) return false; 
     var liYear  = parseInt(loDate[0]);
     var liMonth = parseInt(loDate[1]);
     var liDay   = parseInt(loDate[2]);
     if ((loDate[0].length>4)||(loDate[1].length>2)||(loDate[2].length>2)) return false;
     if (isNaN(liYear)||isNaN(liMonth)||isNaN(liDay)) return false;
     if ((liYear<1900)||(liYear>3000)) return false;
     if ((liMonth>12)||(liMonth<=0))   return false;
     if (Date_getDay(liYear,liMonth)<liDay) return false;
     return !isNaN(Date.UTC(liYear,liMonth,liDay));
    }      /*-- 返回某年某月的天数-- */
    function Date_getDay(aiYear,aiMonth){
     var loDay = [0,31,28,31,30,31,30,31,31,30,31,30,31];
     if (aiYear%4==0) loDay[2] = 29;
     return loDay[aiMonth];
    }怎么样用JavaScript或者JScript将“2003-1-6”这样的格式转换成“2003-01-06”这样的格式?  
    ---------------------------------------------------------------  
     
    <script  language=javascript>  
    function  changedate(temp)  
    {  arrdate=temp.split('-');  
       if  (arrdate.length<2)  
       {return  temp;}  
       else  
       {  
           if  (arrdate[1].length==1)  
                   {arrdate[1]="0"+arrdate[1];}  
           if  (arrdate[2].length==1)  
                   {arrdate[2]="0"+arrdate[2];}  
           return    arrdate.join("-");  
       }  
     
    }  
     
    </script>  
    ---------------------------------------------------------------  
     
    var  re=/([0-9]{4})-([0-9]{1})-([0-9]{1})/g;  
    var  s="2003-1-6";  
    s=s.replace(re,"$1-0$2-0$3");  
    alert(re.length());  
    ---------------------------------------------------------------  
     
    <script>  
    function  a(s){return  s.replace(/-(\d)(?=\D  |$)/g,"-0$1");}  
    alert(a("2003-1-6"));  
    alert(a("2003-10-6"));  
    alert(a("2003-1-16"));  
    </script>______________________________________
    判断一个日期是否正确
    如出现:2005-12-50这个日期的,就是错误的
    <script language=javascript>
    String.prototype.isDate = function()
    {
       var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
       if(r==null)return false; var d = new Date(r[1], r[3]-1, r[4]); 
       return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
    }
    alert("2005-12-50".isDate());
    alert("2005-12-30".isDate());
    </script>
    输入日期格式yyyy-mm-dd,用JS判断如果输入的是当前日期所在月(比如2002-05-**)或者是上个月(2002-04-**),则允许提交,否则不允许提交,给出提示信息。    
     
    非常感谢!  
     
     
    ---------------------------------------------------------------  
     
    var  dt  =  new  Date();  
    当前日期所在月:  dt.getMonth()+1  
     
    ---------------------------------------------------------------  
     
    如果当前月份是一月呢  
     
    所以建议用时间差,改为  
     
    <form  onsubmit="return(check(d.value))">  
    <input  name=d>  
    </form>  
    <script>  
    function  check(str){  
    var  dt  =  new  Date();  
    var  reg  =  /^(\d{4})-(\d{1,2})-\d{1,2}$/;  
    if(arr=str.match(reg)){  
    if(arr[1]  ==  dt.getFullYear()  &&  arr[2]  ==  (dt.getMonth()+1))return  true;  
    dt.setDate(0);  
    if(arr[1]  ==  dt.getFullYear()  &&  arr[2]  ==  (dt.getMonth()+1))return  true;  
    }  
    alert("error");  
    return  false;  
    }  
    </script>  
     
      

  5.   

    to meizz(梅花雪)
       其实我想要的只是正则表达式,而不是您的函数,因为我现在是在.net下做winForms的开发,我们写了一个利用正则表达式验证输入框文本是否符合业务要求的通用函数,现在目标是想只替换里面的对应正则表达式来解决验证日期+时间格式有效性的问题.
       ^_^
      

  6.   

    你这个问题可以在C#里用  System.DateTime.Parse(""); //转化成时间对象再判断是否正确
      

  7.   

    24 小时制:
    ^20[\d]{2}-(?:0{0,1}\d|1[0-2])-(?:[0-2]{0,1}\d|3[01]) (?:[01]{0,1}\d|2[0-3]):[0-6]{0,1}\d:[0-6]{0,1}\d$12 小时制:
    ^20[\d]{2}-(?:0{0,1}\d|1[0-2])-(?:0{0,1}\d|1[0-2]) (?:[01]{0,1}\d|2[0-3]):[0-6]{0,1}\d:[0-6]{0,1}\d (?:AM|PM)$没有做闰月、年检测
      

  8.   

    100内四的倍数:
    (?:[02468][048]|[13579][26])100内非四的倍数:
    (?:[02468][^0^4^8]|[13579][^2^6])400的倍数高两位:
    (?:[02468][048]|[13579][26])[02468](?=00))非400的倍数的高两位:
    (?:[02468][^0^4^8]|[13579][^2^6])(?=00)平年(非4的倍数或400的倍数)
    (?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)闰年(4的倍数且非400倍数)
    (?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])============================================大月:
    [13578(?:10)(?:12)](?:[0-2]\d|3[01])小月:
    [469(?:11)](?:[0-2]\d|30)闰二月:
    (?:[01]\d|2[0-8])平二月
    (?:[01]\d|2[0-7])平年月份 + 日:
    (?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年月份 + 日:
    (?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))平年 + 月份 + 日
    (?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年 + 月份 + 日
    (?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))============================================完整年月日
    (?:(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))============================================时间(12小时制):
    (?:[0]?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?:AM|PM)时间(24小时制):
    (?:[01]\d|2[0-3]):[0-5]?\d:[0-5]?\d=================================================完整 YYYY-MM-DD HH-MM-SS(12小时制)
    (?:(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))) (?:[0]?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?:AM|PM)完整 YYYY-MM-DD HH-MM-SS(24小时制)
    (?:(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))(?:[01]\d|2[0-3]):[0-5]?\d:[0-5]?\d
      

  9.   

    发现几个错误:100内非四的倍数:
    (?:[02468][^0^4^8]|[13579][^2^6])
    =>
    (?:[02468][1235679]|[13579][01345789])============================================故后面的应该改成:100内四的倍数:
    (?:[02468][048]|[13579][26])100内非四的倍数:
    (?:[02468][1235679]|[13579][01345789])400的倍数:
    (?:[02468][048]|[13579][26])00平年(非4的倍数或400的倍数)
    (?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)闰年(4的倍数且非400倍数)
    (?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))============================================大月:
    [13578(?:10)(?:12)](?:[0-2]\d|3[01])小月:
    [469(?:11)](?:[0-2]\d|30)闰二月:
    (?:[01]\d|2[0-8])平二月
    (?:[01]\d|2[0-7])平年月份 + 日:
    (?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年月份 + 日:
    (?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))平年 + 月份 + 日
    (?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年 + 月份 + 日
    (?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))============================================完整年月日
    (?:(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))============================================时间(12小时制):
    (?:0?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?: ?AM|PM)时间(24小时制):
    (?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d=================================================完整 YYYY-MM-DD HH-MM-SS(12小时制)
    (?:(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))(?:0?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?: ?AM|PM)完整 YYYY-MM-DD HH-MM-SS(24小时制)
    (?:(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))(?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d
      

  10.   

    晕,又写错一个地方:闰年(4的倍数且非400倍数)
    (?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))
    =>
    (?=(?!(?:[02468][048]|[13579][26])00))\d\d(?:[02468][048]|[13579][26])