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