要确保用户输入日期的有效性,首先要验证用户输入的日期是否合法,以此来有效提高程序的执行速度,在这个例子中文本框输入“2017-02-29”,单击“提交”按钮后,将实现验证日期
需要注意一下几点:
1.首先需要从输入的字符串中提取出年份,月份和日;并判断输入的年份,月份和日份是否大于0的数字,然后将月份和日中小于10的数字格式化为长度为2的字符串(在其前面填充0)。
2.将提取并格式化后的年份,月份和日重新组合,使其组合为“YYYY-MM-DD”格式的字符串,并判断新组合的字符串长度是否为10.
3.判断输入年份是否为闰年,从而判断2月份的天数(判断输入的年份是否为闰年,从而判断2月份的天数)。
4.根据1,3,5,7,8,10,12月份为31天,其他月份为30天的原则,判断除2月份以外的月份的天数是否正确。
5.判断月份是否大于12
其中还应用了正则表达式来判断日期的基本格式,正则表达式语法如下:/(\d{4}-)(\d{2}-)(\d{2})$/;
应用JavaScript编写验证码输入的日期格式是否正确的checkdata()代码如下:
<script>
// 判断输入的日期是否正确
function checkdata(data){
if(data==""){
return true;
}
subYY=data.substr(0,4)
if(isNaN(subYY)||subYY<=0){
return true;
}
// 转换月份
if(data.indexOf('-',0)!=-1){
separate="-"
}else{
return true;
}
area=data.indexOf(separate,0)
subMM=data.substr(area+1,data.indexOf(separate,area+1)-(area+1))
if(isNaN(subMM)||subMM<=0){
return true;
}
if(subMM.length<2){
subMM="0"+subMM
}
// 转换日
area=data.lastIndexOf(separate)
subDD=data.substr(area+1,data.length-area-1)
if(isNaN(subDD)||subDD<=0){
return true;
}
if(eval(subDD<10)){
subDD="0"+eval(subDD)
}
NewDate=subYY+"-"+subMM+"-"+subDD
// alert(NewDate);
if(NewDate.length!=10){
return true;
}
if(NewDate.substr(4,1)!="-"){
return true;
}
if(NewDate.substr(7,1)!="-"){
return true;
}
var MM=NewDate.substr(5,2);
var DD=NewDate.substr(8,2);
if((subYY%4==0&&subYY%100!=0)||subYY%400==0){//判断是否为闰年
if(parseInt(MM)==2){//闰年的二月份
if(DD>29){
return true;
}
}
}else{
if(parseInt(MM)==2){//非闰年的二月份
if(DD>28){
return true;
}
}
}
var mm=new Array(4,6,9,11);//判断每月中最大天数是30或者31
for(i=0;i<mm.length;i++){
if(parseInt(MM)==mm[i]){
if(parseInt(DD)>30){
return true;
}
}else{
if(parseInt(DD)>31){
return true;
}
}
}if(parseInt(MM)>12){
return true;
}
return false;
}
应用JavaScript脚本编写一个checkdata函数,并通过正则表达式验证用户输入的日期格式是否正确
function checkdata1(data){
var str=data;
// 在JavaScript中正则表达式只能通过使用"/"开头和结束,不能使用双引号
// 匹配字符串中的指定位数,(\d{2}$表明以两个数字结尾
var expression=/(\d{4}-)(\d{2}-)(\d{2})$/;
var objExp=new RegExp(expression);
if(objExp.test(str)==true){
return true;
}else{
return false;
}
}
编写自定义的JavaScript函数check(),用于在提交表单前判断用户输入是否合法,在该函数中再调用checkdata()和checkdata1,判断输入的日期是否正确,如果不正确则给予提示,否则提交表单。
function check(){
if(form.data.value==""){
alert("请输入正确的日期");
form.data.focus();return false;
}
if(!checkdata1(form.data.value)||form.data.value.length!=10){
alert("你输入的基本格式不对");
form.data.focus();return false;
}
if(checkdata(form.data.value)){
alert("你输入的日期不正确(如:1920-07-17)\n 请注意闰年!");
form.data.focus();
return false;
}
}
</script>
最后是输入框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="" name="form" onsubmit="return check()">
<input type="text" name="data">
<input type="submit" name="submit" value="提交">
<input type="reset" name="reset" value="重置">
</form>
</body>
</html>