不在来 發表於 2024-5-11 11:31:48

日期校验 / 时间校验正则表达式深入解析(超实用!)

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">0 结论</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">0.1 日期格式校验</a></li><li><a href="#_lab2_0_1">0.2 时间格式校验</a></li><li><a href="#_lab2_0_2">0.3 使用方式</a></li></ul><li><a href="#_label1">1 日期校验正则表达式解析</a></li><ul class="second_class_ul"></ul><li><a href="#_label2">附:下面是常用的一些时间日期格式验证Javascript代码</a></li><ul class="second_class_ul"></ul><li><a href="#_label3">总结&nbsp;</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>0 结论</h2>
<p>以下为常用的日期格式校验表达式</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202405/2024511113110937.png" /></p>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>0.1 日期格式校验</h3>
<blockquote><p>以下日期校验可满足&ldquo;四年一闰,百年不闰,四百年再闰&rdquo;</p></blockquote>
<ul><li><code>yyyyMMdd</code></li></ul>
<div class="jb51code"><pre class="brush:js;">^(?:(?!0000){4}(?:(?:0|1)(?:0||3)|(?:0|11)(?:0||30)|02(?:0|1|2))|(?:(((\d{2})(0||)|(()|())00))0229))$
</pre></div>
<ul><li><code>yyyy-MM-dd</code></li></ul>
<div class="jb51code"><pre class="brush:js;">^(?:(?!0000){4}\-(?:(?:0|1)(?:\-0|\-|\-3)|(?:0|11)(?:\-0|\-|\-30)|02(?:\-0|\-1|\-2))|(?:(((\d{2})(0||)|(()|())00))\-02\-29))$
</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>0.2 时间格式校验</h3>
<ul><li><code>hhmmss</code></li></ul>
<p>12 小时制,范围为&nbsp;<code>000000 - 115959</code></p>
<div class="jb51code"><pre class="brush:js;">^(?!120000)(?:0|1)(?:){2}$
</pre></div>
<p>24 小时制,范围为&nbsp;<code>000000 - 235959</code></p>
<div class="jb51code"><pre class="brush:js;">^(?!240000)(?:|2)(?:){2}$
</pre></div>
<ul><li><code>hh:mm:ss</code></li></ul>
<p>12 小时制,范围为&nbsp;<code>00:00:00 - 11:59:59</code></p>
<div class="jb51code"><pre class="brush:js;">^(?!12\:00\:00)(?:0|1)(?:\:){2}$
</pre></div>
<p>24 小时制,范围为&nbsp;<code>00:00:00 - 23:59:59</code></p>
<div class="jb51code"><pre class="brush:js;">^(?!24\:00\:00)(?:|2)(?:\:){2}$
</pre></div>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>0.3 使用方式</h3>
<div class="jb51code"><pre class="brush:js;">String uncheckedStr = "2023-12-12";
final String REGEX_PATTERN = "^(?:(?!0000){4}\-(?:(?:0|1)(?:\-0|\-|\-3)|(?:0|11)(?:\-0|\-|\-30)|02(?:\-0|\-1|\-2))|(?:(((\d{2})(0||)|(()|())00))\-02\-29))$";
if (!Pattern.matches(REGEX_PATTERN, uncheckedStr)) {
    throw new BusinessException(ErrorCodeEnum.INVALID_TIME_PATTERN);
}
</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>1 日期校验正则表达式解析</h2>
<p>以&nbsp;<code>yyyyMMdd</code>&nbsp;为例解析日期校验正则表达式组装过程</p>
<ul><li>匹配前四位年份,匹配范围为&nbsp;<code>0001-9999</code>&nbsp;,使用&nbsp;<code>(?!)</code>&nbsp;排除&nbsp;<code>0000</code>&nbsp;,获得&nbsp;<code>yyyy</code>&nbsp;部分的校验正则表达式</li></ul>
<div class="jb51code"><pre class="brush:js;">(?!0000){4}
</pre></div>
<ul><li>由于月份与日期关联存在多种可能,因此采用模式匹配</li></ul>
<div class="jb51code"><pre class="brush:js;">1. 31 天的月份 01 03 05 07 08 10 12
(?:0|1)          匹配月份
(?:0||3)匹配日期 01 - 31

2. 30 天的月份 04 06 09 11
(?:0|11)               匹配月份
(?:0||30)   匹配日期 01 - 30

3. 02 月存在闰月的问题,且条件较为复杂,因此先匹配 01 - 28 的日期范围
02                        匹配月份
(?:0|1|2)    匹配日期 01 - 28
</pre></div>
<ul><li>使用&nbsp;<code>|</code>&nbsp;组装匹配模式,多个模式使用&nbsp;<code>(?:MODELA|MODELB|MODELC)</code>&nbsp;的方式进行组合,此处组合匹配模式后获得&nbsp;<code>mmdd</code>&nbsp;部分的校验正则表达式</li></ul>
<div class="jb51code"><pre class="brush:js;">匹配 MMdd 的表达式
(?:(?:0|1)(?:0||3)|(?:0|11)(?:0||30)|02(?:0|1|2))
   |--            31 天的月份日期            --|--          30 天的月份日期         --|--   28 天的月份日期    --|
</pre></div>
<ul><li>拼接第 1 步和第 3 步的匹配模式以组装基本的&nbsp;<code>yyyyMMdd</code>&nbsp;模式,该模式下不考虑闰年,因此将第 2 步的二月的日期匹配范围改到了&nbsp;<code>29</code>,该模式无法辨认&nbsp;<code>1900-02-29</code>&nbsp;的非闰年情形</li></ul>
<div class="jb51code"><pre class="brush:js;">不考虑闰年的简易模式(二月的日期匹配范围改到了29,以下模式能正常使用)
^(?!0000){4}(?:(?:0|1)(?:0||3)|(?:0|11)(?:0||30)|02(?:0|1|2))$
</pre></div>
<ul><li>进一步处理闰年年份</li></ul>
<div class="jb51code"><pre class="brush:js;">1. 非百年的年份处理较为简单,枚举 4 的倍数且不为 100 的倍数的年份
((\d{2})(0||)

2. 百年年份保留 400 的倍数
(()|())00)
</pre></div>
<ul><li>拼接模式以匹配闰年日期&nbsp;<code>yyyy0229</code></li></ul>
<div class="jb51code"><pre class="brush:js;">(((\d{2})(0||)|(()|())00))0229
|--          非百年                  --|--      百年(保留400年)      --|
</pre></div>
<ul><li>结合第 3 步和第 6 步的结果组装最终的匹配模式,该模式可以满足&nbsp;四年一闰,百年不闰,四百年再闰&nbsp;的需求</li></ul>
<div class="jb51code"><pre class="brush:js;">^(?:(?!0000){4}(?:(?:0|1)(?:0||3)|(?:0|11)(?:0||30)|02(?:0|1|2))|(?:(((\d{2})(0||)|(()|())00))0229))$</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>附:下面是常用的一些时间日期格式验证Javascript代码</h2>
<div class="jb51code"><pre class="brush:js;">// JavaScript Document
var success = 'success';         //校验成功
var failure = 'failure';         //校验失败
var dateStrNull = 'dateStrNull'; //日期字符串为空
var formatError = "formatError"; //不符合格式
var lengthLt8 = "lengthLt8";   //长度小于8
var monthLT1= 'monthLT1';    //月份不能小于1
var monthGT12 = 'monthGT12';   //月份大于12
var dayGT28 = 'dayGT28';       //日期大于28
var dayGT29 = 'dayGT29';       //日期大于29
var dayGT30 = 'dayGT30';       //日期大于30
var dayGT31 = 'dayGT31';       //日期大于31
var dayLT1 = 'dayLT1';         //日期小于1
var hour24System = '24';       //采用24小时制
var hour12System = '12';       //采用12小时制
var hourGT23 = 'hourGT23';   //小时大于23
var hourGT11 = 'hourGT11';   //小时大于11
var minuteGT59 = 'minuteGT59'; //分钟大于59
var secondGT59 = 'secondGT59'; //秒钟大于59
var dateCompare = 'date';   //比较年月日
var dateTimeCompare = 'dateTime'; //比较年月日或者时分秒或者所有
var timeCompare = 'time';   //比较年时分秒
var dateTimeGTNow = 'dateTimeGTNow';//大于当前年月日或者时分秒或者所有
var dateTimeLTNow = 'dateTimeLTNow';//小于当前年月日或者时分秒或者所有
var equality = 'equality';       //时间相等

//时间格式的正则表达式
var YYYYMMDDReg = /[\d]{4}[\/-]{1}[\d]{1,2}[\/-]{1}[\d]{1,2}/g;
var YYYYMMDDHHmmReg = /[\d]{4}[\/-]{1}[\d]{1,2}[\/-]{1}[\d]{1,2}\s[\d]{1,2}[:][\d]{1,2}/g;
var YYYYMMDDHHmmssReg = /[\d]{4}[\/-]{1}[\d]{1,2}[\/-]{1}[\d]{1,2}\s[\d]{1,2}[:][\d]{1,2}[:][\d]{1,2}/g;
var HHmmssReg = /[\d]{1,2}[:][\d]{1,2}[:][\d]{1,2}/g;
var HHmmReg = /[\d]{1,2}[:][\d]{1,2}/g;

/**
* 校验是否为YYYY-MM-DD 日期格式
* @param dateStr 时间字符串
* @returns
*/
function validateYYYYMMDD(dateStr){
        //如果日期字符串为空
        if(strIsNull(dateStr)){
                return dateStrNull;
        }
       
        //如果小于8位
        if(dateStr.length &lt; 8){
                return lengthLt8;
        }
       
        dateStr = addHRToStr(dateStr);
       
        var regResult = dateStr.replace(YYYYMMDDReg,'');
        //符合格式
        if(regResult==''){
                var line_one = dateStr.indexOf('-');       //获取第一个横-
                var line_two = dateStr.lastIndexOf('-');   //获取第二个横-
       
                var year_str = dateStr.substring(0,line_one);   //获取年
                var month_str = dateStr.substring(line_one+1,line_two); //获取月
                var day_str = dateStr.substring(line_two+1);//获取日
               
                //转换成数字格式
                var year_num = getIntValue(year_str);
                var month_num = getIntValue(month_str);
                var day_num = getIntValue(day_str);
               
                //校验月份
                var monthResult = validateMonth(month_num);
                if(monthResult!=success){
                        return monthResult;
                }
               
                //如果日期小于1
                if(day_num&lt;1){
                        return dayLT1;
                }
                //校验日期
                return validateDay(year_num,month_num,day_num);
        }else{
                return formatError;
        }
        return failure;
}

/**
* 校验是否为YYYY-MM-DD HH:mm 日期+时分格式
* @param dateStr 时间字符串
* @param hourSys 小时制(默认24小时制)
* @returns
*/
function validateYYYYMMDDHHmm(dateStr,hourSys){
        //如果日期字符串为空
        if(strIsNull(dateStr)){
                return dateStrNull;
        }
       
        //如果小时制为空,则设置为24小时制
        if(strIsNull(hourSys)){
                hourSys = hour24System;
        }
       
        var regResult = dateStr.replace(YYYYMMDDHHmmReg,'');
        //符合格式
        if(regResult==''){
                var line_one = dateStr.indexOf('-');       //获取第一个横-
                var line_two = dateStr.lastIndexOf('-');   //获取第二个横-
                var space = dateStr.indexOf(' ');          //获取空格
                var colon_one = dateStr.indexOf(':');//获取第一个冒号

                var year_str = dateStr.substring(0,line_one);   //获取年
                var month_str = dateStr.substring(line_one+1,line_two); //获取月
                var day_str = dateStr.substring(line_two+1,space);//获取日
                var hour_str = dateStr.substring(space+1,colon_one); //获取小时
                var minute_str = dateStr.substring(colon_one+1);//获取分钟
               
                //转换成数字格式
                var year_num = getIntValue(year_str);
                var month_num = getIntValue(month_str);
                var day_num = getIntValue(day_str);

                var hour_num = getIntValue(hour_str);
                var minute_num = getIntValue(minute_str);
               
                //校验月份
                var monthResult = validateMonth(month_num);
                if(monthResult!=success){
                        return monthResult;
                }
               
                //如果日期小于1
                if(day_num&lt;1){
                        return dayLT1;
                }
                //校验日期
                var dayResult = validateDay(year_num,month_num,day_num);
                if(dayResult!=success){
                        return dayResult;
                }
               
                //校验小时
                var hourResult = validateHour(hour_num,hourSys);
                if(hourResult!=success){
                        return hourResult;
                }
               
                return validateMinute(minute_num);
        }else{
                return formatError;
        }
        return failure;
}

/**
* 校验是否为YYYY-MM-DD HH:mm:ss 日期+时分秒格式
* @param dateStr 时间字符串
* @param hourSys 小时制(默认24小时制)
* @returns
*/
function validateYYYYMMDDHHmmss(dateStr,hourSys){
        //如果日期字符串为空
        if(strIsNull(dateStr)){
                return dateStrNull;
        }
       
        //如果小时制为空,则设置为24小时制
        if(strIsNull(hourSys)){
                hourSys = hour24System;
        }
       
        var regResult = dateStr.replace(YYYYMMDDHHmmssReg,'');
        //符合格式
        if(regResult==''){
                var line_one = dateStr.indexOf('-');       //获取第一个横-
                var line_two = dateStr.lastIndexOf('-');   //获取第二个横-
                var space = dateStr.indexOf(' ');          //获取空格
                var colon_one = dateStr.indexOf(':');      //获取第一个冒号
                var colon_two = dateStr.lastIndexOf(':');//获取第二个冒号
               
                var year_str = dateStr.substring(0,line_one);   //获取年
                var month_str = dateStr.substring(line_one+1,line_two); //获取月
                var day_str = dateStr.substring(line_two+1,space);//获取日
               
                var hour_str = dateStr.substring(space+1,colon_one); //获取小时
                var minute_str = dateStr.substring(colon_one+1,colon_two);//获取分钟
                var second_st = dateStr.substring(colon_two+1);//获取分钟
               
                //转换成数字格式
                var year_num = getIntValue(year_str);
                var month_num = getIntValue(month_str);
                var day_num = getIntValue(day_str);
               
                var hour_num = getIntValue(hour_str);
                var minute_num = getIntValue(minute_str);
                var second_num = getIntValue(second_st);
               
                //校验月份
                var monthResult = validateMonth(month_num);
                if(monthResult!=success){
                        return monthResult;
                }
               
                //如果日期小于1
                if(day_num&lt;1){
                        return dayLT1;
                }
                //校验日期
                var dayResult = validateDay(year_num,month_num,day_num);
                if(dayResult!=success){
                        return dayResult;
                }
               
                //校验小时
                var hourResult = validateHour(hour_num,hourSys);
                if(hourResult!=success){
                        return hourResult;
                }
               
                //校验分钟
                var minuteResult = validateMinute(minute_num);
                if(minuteResult!=success){
                        return minuteResult;
                }
               
                //校验秒
                return validateSecond(second_num);
        }else{
                return formatError;
        }
        return failure;
}

/**
* 校验是否为HH:mm:ss 时分秒格式
* @param dateStr 时间字符串
* @param hourSys 小时制(默认24小时制)
* @returns
*/
function validateHHmmss(dateStr,hourSys){
        //如果日期字符串为空
        if(strIsNull(dateStr)){
                return dateStrNull;
        }
       
        //如果小时制为空,则设置为24小时制
        if(strIsNull(hourSys)){
                hourSys = hour24System;
        }
       
        var regResult = dateStr.replace(HHmmssReg,'');
        //符合格式
        if(regResult==''){
                var colon_one = dateStr.indexOf(':');      //获取第一个冒号
                var colon_two = dateStr.lastIndexOf(':');//获取第二个冒号
       
                var hour_str = dateStr.substring(0,colon_one); //获取小时
                var minute_str = dateStr.substring(colon_one+1,colon_two);//获取分钟
                var second_st = dateStr.substring(colon_two+1);//获取分钟
               
                //转换成数字格式
                var hour_num = getIntValue(hour_str);
                var minute_num = getIntValue(minute_str);
                var second_num = getIntValue(second_st);

                //校验小时
                var hourResult = validateHour(hour_num,hourSys);
                if(hourResult!=success){
                        return hourResult;
                }
               
                //校验分钟
                var minuteResult = validateMinute(minute_num);
                if(minuteResult!=success){
                        return minuteResult;
                }
               
                //校验秒
                return validateSecond(second_num);
        }else{
                return formatError;
        }
        return failure;
}

/**
* 校验是否为HH:mm 时分格式
* @param dateStr 时间字符串
* @param hourSys 小时制(默认24小时制)
* @returns
*/
function validateHHmm(dateStr,hourSys){
        //如果日期字符串为空
        if(strIsNull(dateStr)){
                return dateStrNull;
        }
       
        //如果小时制为空,则设置为24小时制
        if(strIsNull(hourSys)){
                hourSys = hour24System;
        }
       
        var regResult = dateStr.replace(HHmmReg,'');
        //符合格式
        if(regResult==''){
                var colon_one = dateStr.indexOf(':');      //获取第一个冒号
                var hour_str = dateStr.substring(0,colon_one); //获取小时
                var minute_str = dateStr.substring(colon_one+1);//获取分钟
               
                //转换成数字格式
                var hour_num = getIntValue(hour_str);
                var minute_num = getIntValue(minute_str);

                //校验小时
                var hourResult = validateHour(hour_num,hourSys);
                if(hourResult!=success){
                        return hourResult;
                }
               
                //校验分钟
                return validateMinute(minute_num);
        }else{
                return formatError;
        }
        return failure;
}

/**
* 添加横线到日期的格式
* @param oldStr
* @returns {String}
*/
function addHRToStr(oldStr){
        //如果存在-或者/
        if(oldStr.indexOf('-')&gt;=0 || oldStr.indexOf('/')&gt;=0){
                return oldStr;
        }
       
        //如果小于6或者大于8
        if(oldStr.length != 8 ){
                return oldStr;
        }
       
        var idx1 = 4;
        var idx2 = 6;
       
        if(oldStr.length == 6){
                idx2 = 5;
        }else if(oldStr.length == 7){
                idx2 = 6;
        }
       
        var newStr = oldStr.substring(0,4) + "-" + oldStr.substring(4,idx2) + "-" + oldStr.substring(idx2);
        return newStr;
}

/**
* 校验是否大于当前时间(自动检测传入的时间格式)
* @param dateStr
* @returns
*/
function isMorethanNow(dateStr){
        var result = 'equals';
        //如果是YYYY-MM-DD
        if(dateStr.replace(YYYYMMDDReg,'')==''){
                result = compareNow(dateStr,dateCompare);
               
        //如果是YYYY-MM-DD HH:mm:ss
        }else if(dateStr.replace(YYYYMMDDHHmmssReg,'')==''){
                result = compareNow(dateStr,dateTimeCompare);
               
        //如果是YYYY-MM-DD HH:mm
        }else if(dateStr.replace(YYYYMMDDHHmmReg,'')==''){
                result = compareNow(dateStr+":59",dateTimeCompare);
               
        //如果是HH:mm:ss
        }else if(dateStr.replace(HHmmssReg,'')==''){
                result = compareNow(dateStr,timeCompare);
       
        //如果是HH:mm
        }else if(dateStr.replace(HHmmReg,'')==''){
                result = compareNow(dateStr+":59",timeCompare);
        }
        //如果大于
        if(result == dateTimeGTNow){
                return 'true';
        }else if(result == dateTimeLTNow){
                return 'false';
        }else{
                return 'equals';
        }
}

/**
* 比较当前的日期或者时间(日期,时间)
* @param dateStr
* @param compareType 比较方式 date,time,dateTime (默认比较年月日)
*/
function compareNow(dateStr,compareType){
        //如果比较方式为空
        if(strIsNull(compareType)){
                compareType = dateCompare;
        }

        //获取当前日期
        var now = new Date();
        //比较日期
        if(compareType == dateCompare){
                var nowDate = new Date(now.getFullYear()+'/'+(now.getMonth()+1)+'/'+now.getDate());
                var fd_date = new Date(dateStr.replace(/-/g,'/'));
               
                if(fd_date&gt;nowDate){
                        return dateTimeGTNow;
                }else if(fd_date&lt;nowDate){
                        return dateTimeLTNow;
                }else{
                        return equality;
                }
        //比较年月日时分秒
        }else if(compareType == dateTimeCompare){
                var fd_date = new Date(dateStr.replace(/-/g,'/'));
               
                if(fd_date&gt;now){
                        return dateTimeGTNow;
                }else if(fd_date&lt;now){
                        return dateTimeLTNow;
                }else{
                        return equality;
                }
        //比较时分秒       
        }else if(compareType == timeCompare){
                var nowTimeStr = now.getHours()+''+ now.getMinutes()+''+ now.getSeconds();
                var dateStrNoSpace = dateStr.replace(/:/g,'');
               
                if(dateStrNoSpace&gt;nowTimeStr){
                        return dateTimeGTNow;
                }else if(dateStrNoSpace&lt;nowTimeStr){
                        return dateTimeLTNow;
                }else{
                        return equality;
                }       
        }
}

/**
* 校验月份是否合法
* @param month_num 月份
* @returns
*/
function validateMonth(month_num){
        //如果月份大于12或小于1
        if(month_num&gt;12){
                return monthGT12;
        }else if(month_num&lt;1){
                return monthLT1;
        }
        return success;
}

/**
* 校验日期是否合法
* @param year_num年份
* @param month_num 月份
* @param day_num 日期
* @returns
*/
function validateDay(year_num,month_num,day_num){
        if(day_num&lt;1){
                return dayLT1;
               
        //如果月份是1,3,5,7,8,10,12
        }else if((month_num==1||month_num==3||month_num==5||month_num==7
                        ||month_num==8||month_num==10||month_num==12)&amp;&amp;day_num&gt;31){
                return dayGT31;
               
        //如果月份是4,6,9,11
        }else if((month_num==4||month_num==6||month_num==9||month_num==11)
                        &amp;&amp;day_num&gt;30){
                return dayGT30;
               
        //如果月份是2
        }else if(month_num==2){
                //如果为闰年
                if(isLeapYear(year_num)&amp;&amp;day_num&gt;29){
                        return dayGT29;
                }else if(day_num&gt;28){
                        return dayGT28;
                }
        }
        return success;
}

/**
* 校验是否为闰年
* @param year_num
* @returns
*/
function isLeapYear(year_num){

        /*年份为4的倍数不一定是闰年
       * (1)年份不是100的倍数但是4的倍数都是闰年
       * (2)年份是400的倍数的年份是闰年 (如1900年不是闰年,而2000年是闰年)
       */
        return year_num%4==0&amp;&amp;(year_num%100!=0||year_num%400==0);
}

/**
* 校验小时
* @param hourSys 小时制
* @param hour_num
* @returns
*/
function validateHour(hour_num,hourSys){
        //24小时制
        if(hourSys == hour24System&amp;&amp;hour_num &gt; 23){
                return hourGT23;
       
        //12小时制
        }else if(hourSys == hour12System&amp;&amp;hour_num &gt; 11){
                return hourGT11;
        }
        return success;
}

/**
* 校验分钟
* @param minute_num
* @returns
*/
function validateMinute(minute_num){
        //如果小时大于24
        if(minute_num&gt;59){
                return minuteGT59;
        }
        return success;
}

/**
* 校验秒钟
* @param second_num
* @returns
*/
function validateSecond(second_num){
        //如果小时大于24
        if(second_num&gt;59){
                return secondGT59;
        }
        return success;
}

/**
* 根据字符串获取整数值
* @param str
* @returns
*/
function getIntValue(str){
        if(strIsNull(str)){
                return 0;
        }
       
        return str.replace(/^0+/g,'');
}

/**
* 字符串是否为空
* @param dateStr
*/
function strIsNull(str){
        if(str!=null
                        &amp;&amp;str.replace(/(^\s*)|(\s*$)/g,'').length&gt;0){
                return false;
        }
        return true;
}

/**
* 得到错误的提示信息
* @param errCode 错误码
* @param controlName 控件名
* @param format 格式
*/
function getErrorMsg(errCode,controlName,format){
        if(errCode == dateStrNull){
                return controlName+'不能为空';
        }else if(errCode == formatError){
                return controlName+'请按日期格式\''+format+'\'输入';
        }else if(errCode == lengthLt8){
                return controlName+'请按日期格式\'YYYYMMDD\'输入';
        }else if(errCode == monthLT1){
                return controlName+'填写的月份有误,月份不能小于1';
        }else if(errCode == monthGT12){
                return controlName+'填写的月份有误,月份不能大于12';
        }else if(errCode == dayLT1){
                return controlName+'填写的日期有误,日期不能小于1';
        }else if(errCode == dayGT28){
                return controlName+'填写的日期有误,平年的2月份日期不能大于28';
        }else if(errCode == dayGT29){
                return controlName+'填写的日期有误,闰年的2月份日期不能大于29';
        }else if(errCode == dayGT30){
                return controlName+'填写的日期有误,月份为4,6,9,11时,日期不能大于30';
        }else if(errCode == dayGT31){
                return controlName+'填写的日期有误,月份为1,3,5,7,8,10,12时,日期不能大于31';
        }else if(errCode == hourGT23){
                return controlName+'填写的小时有误,24小时制的小时数不能超过23';
        }else if(errCode == hourGT11){
                return controlName+'填写的小时有误,12小时制的小时数不能超过11';
        }else if(errCode == minuteGT59){
                return controlName+'填写的分有误,分钟数不能超过59';
        }else if(errCode == secondGT59){
                return controlName+'填写的秒有误,秒钟数不能超过59';
        }else if(errCode == dateGTNow){
                return controlName+'填写日期有误,不能大于当前日期';
        }else if(errCode == dateLTNow){
                return controlName+'填写日期有误,不能小于当前日期';
        }else if(errCode == timeGTNow){
                return controlName+'填写时间有误,不能大于当前时间';
        }else if(errCode == timeLTNow){
                return controlName+'填写时间有误,不能小于当前时间';
        }else if(errCode == failure ){
                return controlName+'填写有误';
        }
}
</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>总结&nbsp;</h2>
頁: [1]
查看完整版本: 日期校验 / 时间校验正则表达式深入解析(超实用!)