1. 程式人生 > >驗證日期輸入格式

驗證日期輸入格式

用戶輸入 提示 oct 引號 ray doctype RR meta ret

要確保用戶輸入日期的有效性,首先要驗證用戶輸入的日期是否合法,以此來有效提高程序的執行速度,在這個例子中文本框輸入“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>

驗證日期輸入格式