一个特别奇怪的问题
我要做一个日期类型的验证。js代码如下:
function checkJoinTime() {
            var reg = /^(\d{4})-(\d{2})-(\d{2})$/;
            var jointime = $('.JoinTime').val();
            alert("1");
            if (!reg.test(jointime) && RegExp.$2 <= 12 && RegExp.$3 <= 31) {
                return "日期格式不正确,请重新输入(yyyy-mm-dd)";
            }
        }结果没问题:效果通过
问题来了,如果我去掉JS中的alert弹出框
function checkJoinTime() {
            var reg = /^(\d{4})-(\d{2})-(\d{2})$/;
            var jointime = $('.JoinTime').val();
            //alert("1");
            if (!reg.test(jointime) && RegExp.$2 <= 12 && RegExp.$3 <= 31) {
                return "日期格式不正确,请重新输入(yyyy-mm-dd)";
            }
        }
结果提交数据 根本没有执行进入 弹出未知错误框
求大神指点~~~~~~一个特别奇怪的问题

解决方案 »

  1.   

    什么浏览器,什么jQuery版本,换浏览器(比如Firefox、Chrome)试过么?
      

  2.   

    var jointime = $('.JoinTime').val();
    你这个是取class为JoinTime的值,这个应该不是唯一的,他要继续查找。而你用alert就阻断查找
    建议你用id的取值方式$("#JoinTime").val()
      

  3.   

     感觉不是JS问题  debug下  看function 是否执行完成?
      

  4.   

    if (!reg.test(jointime) && RegExp.$2 <= 12 && RegExp.$3 <= 31)
    这里不应该是"或"
    !reg.test(jointime) || RegExp.$2 <= 0 || RegExp.$2 > 12 || RegExp.$3<=0 || RegExp.$3>31再判断大月小月和润年就自己想了
      

  5.   


    function showdata(){
    var str=/^19(\d{2})-([1-9]|0[1-9]|1[0-2]{1,2})-([1-9]|1[0-9]||2[0-9]|3[0-1])$/
    var reg=new RegExp(str);
    result=reg.test(t1.value);
    if(result==true){
    alert("你输入的日期是"+t1.value);
    }
    else{alert("你输入了一个错误的日期");}
    }
    脚本也可以用vbs来写,那么就可以直接用isDate函数
      

  6.   

    ^((((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-))$
    下面的是加了时间验证的
    ^((((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$
    日期的正则表达式,YYYY-MM-DD   YYYY/MM/DD   YYYY.MM.DD        
    "^(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.)(?:0?2\1(?:29))$)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))$" string regex = @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"; //日期部分
    regex += @"(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$";//时间部分吐血吧
      

  7.   


    我们特殊处理过的,放心$('.JoinTime').val();是唯一的。
    值是可以获得到的,只是感觉那个JS函数有问题
    有没有好点的日期格式验证的方法。
      

  8.   


    你提供的这段代码我放程序中,为什么我输入2012-12-08
    这样的格式的时候,返回的依然是false ?   
      

  9.   


    你提供的这段代码我放程序中,为什么我输入2012-12-08
    这样的格式的时候,返回的依然是false ?   
    那个的确是错的,你非要用正则的话,试试
    ^((((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-))$