验证日期输入格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证日期输入格式相关的知识,希望对你有一定的参考价值。

要确保用户输入日期的有效性,首先要验证用户输入的日期是否合法,以此来有效提高程序的执行速度,在这个例子中文本框输入“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>

 

以上是关于验证日期输入格式的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 日期输入格式验证

jQuery 验证插件日期格式:日期干扰 dateITA

使用不带特殊字符 + 验证格式的日期输入创建一个 from

WPF C#如何将文本框输入验证为日期格式

Oracle - 日期格式验证 [重复]

excel表如何设置指定日期之后不可编辑?