1.我要求用户在输入框中,输入固定的日期格式字符串。
2.格式如:yyyy-MM-dd hh-mm-ss.
3.并在用户输入错误的日期格式,提醒其出错信息,并让用户可以在同一输入框中,正确输入日期。
4.最好是在用户输入的时候,有提示其正确的格式的基本样子。

解决方案 »

  1.   

    Javascript  对输入框的 KeyPress ,KeyDown事件做处理
      

  2.   

    为了规范,把格式改为了 yyyy-MM-dd hh:mm:ss另外,下面的代码写得太乱七八糟了,都不好意思贴出来
    但效果达到了运行后,红色部分是规范
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
    <title>无标题文档</title>
    <script>
    function showFormat(obj){
    var model = "1970-01-01 00:00:00";
    var reg = [];
    reg[0] = /^$/;
    reg[1] = /^\d$/;
    reg[2] = /^\d\d$/;
    reg[3] = /^\d\d\d$/;
    reg[4] = /^\d\d\d\d$/;
    reg[5] = /^\d\d\d\d-$/;
    reg[6] = /^\d\d\d\d-\d$/;
    reg[7] = /^\d\d\d\d-\d\d$/;
    reg[8] = /^\d\d\d\d-\d\d-$/;
    reg[9] = /^\d\d\d\d-\d\d-\d$/;
    reg[10] = /^\d\d\d\d-\d\d-\d\d$/;
    reg[11] = /^\d\d\d\d-\d\d-\d\d $/;
    reg[12] = /^\d\d\d\d-\d\d-\d\d \d$/;
    reg[13] = /^\d\d\d\d-\d\d-\d\d \d\d$/;
    reg[14] = /^\d\d\d\d-\d\d-\d\d \d\d:$/;
    reg[15] = /^\d\d\d\d-\d\d-\d\d \d\d:\d$/;
    reg[16] = /^\d\d\d\d-\d\d-\d\d \d\d:\d\d$/;
    reg[17] = /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:$/;
    reg[18] = /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d$/;
    reg[19] = /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d$/;
    var flag = false; while(!flag){
    var i = 0;
    var flag2 = false;
    for(i = 0; i < reg.length; i++){
    flag = flag || reg[i].test(obj.value);
    if(reg[i].test(obj.value)){
    break;
    }
    } var tempDateStr = obj.value + model.substring(i);
    divMessage.innerHTML = "<font color='red'>" + tempDateStr + "</font>";
    // 下面两行可以去掉,用作测试
    divMessage.innerHTML += "<br/>" + new Date(tempDateStr.replace(/-/,"/")).toString() + "<br/>";
    divMessage.innerHTML += "flag:" + flag + "<br/>checkDate:" + checkDate(tempDateStr);

    obj.value = (flag && checkDate(tempDateStr)) ? obj.value : obj.value.substring(0,obj.value.length - 1);
    }
    }function checkDate(ds) {
    var reg = /^(\d{1,4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
    var mr = reg.exec(ds);
    if (!mr) return false;
    var y = parseInt(mr[1]);
    var m = parseInt(mr[2]) - 1;
    var d = parseInt(mr[3]);
    var date = new Date(ds.replace(/-/,"/"));
    return ((date.getYear() == y || date.getYear() == y - 1900) &&
    date.getMonth() == m &&
    date.getDate() == d &&
    date.toString() != "NaN");
    }
    </script>
    </head>
     
    <body>
    <input type="text" onkeyup="showFormat(this)"/>
    <div id="divMessage"></div>
    </body>
    </html>
      

  3.   

    你让用户输yyyy-MM-dd hh:mm:ss 这个,多麻烦。
      

  4.   

    我楼上的代码的确垃圾,修改了一下:或者就用日历控件<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
    <title>无标题文档</title>
    <script>
    function showFormat(obj){
    var model = "1970-01-01 00:00:00";
    var reg = /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d$/;
    var flag = false; while(!flag){
    var tempDateStr = obj.value + model.substring(obj.value.length);
    flag = reg.test(tempDateStr);
    divMessage.innerHTML = "<font color='red'>" + tempDateStr + "</font>"; obj.value = (flag && checkDate(tempDateStr)) ? obj.value : obj.value.substring(0,obj.value.length - 1);
    }
    }function checkDate(ds) {
    var reg = /^(\d{1,4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
    var mr = reg.exec(ds);
    if (!mr) return false;
    var y = parseInt(mr[1]);
    var m = parseInt(mr[2]) - 1;
    var d = parseInt(mr[3]);
    var date = new Date(ds.replace(/-/,"/"));
    return ((date.getYear() == y || date.getYear() == y - 1900) &&
    date.getMonth() == m &&
    date.getDate() == d &&
    date.toString() != "NaN");
    }
    </script>
    </head>
     
    <body>
    <input type="text" onkeyup="showFormat(this)"/>
    <div id="divMessage"></div>
    </body>
    </html>
      

  5.   

    <script language="javascript"> 
    function strDateTime(str) { 
    if(str.value!="") {
    var r = str.value.match(/^(\d{4})(\-{0,1})(\d{2})\2(\d{2})$/); 
    if(r==null) {
    alert("输入的时间格式不对! 时间格式为:YYYY-MM-DD或YYYYMMDD ,例:2006-01-01或20060101");
    return false;
    } var d= new Date(r[1], r[3]-1, r[4]);
    if(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]) {
    return true;
    } else {
    alert("输入的日期有误");
    return false;
    }
    }

    </script>