JavaScript校验日期格式

  网页中经常会有些输入框是要求输入日期格式的,如果输入的不是日期格式就需要提示用户重新输入,以下的 JavaScript 支持 YYYY-MM-DD 或者 YYYYMMDD 形式的日期输入,判断规则很简单,首先判断输入的位数是否在 8~10 之间,然后将输入的内容中的‘ - ’符号替换成为‘ 1 ’,对替换后的内容做判断看是否全部为数字,如果输入的内容中包含‘ - ’,则判断最后一次出现‘ - ’和第一次出现‘ - ’的位置之差是否为不大于 3 ,因为两者之间是月份,而月份有可能输入一位或两位,所以两者之间的最大差值是 3 ,然后分别从输入的字符串中获取年月日,再判断年份是否闰年来判断每个月的最后一天,看看输入的天数是否超过了每个月的最后一天,从而来判断输入的是否为日期,该判断灵活性差,假如用户提出 YYYY/MM/DD 形式日期的输入就得改代码,不如正则表达式来的方便,如果有更好的办法希望大家提出,我们共同进步!

新建一个页面,页面中就有个输入框,该输入框中输入日期,在其onblur事件中调用日期格式判断方法。

<form name=fm >

      <input type=text name=StartStatDate  class=input description="统计期间开始日期" onblur="checkDateFormate(this);"/>

</form>

//判断输入的内容是否为日期格式

function checkDateFormate(Field) {

    var inputDateValue = Field.value;

    var desc = Field.description;

    if(inputDateValue == null || inputDateValue == '') {

       return false;

    }

    //获取输入字符串的长度

    var inputValueLength = inputDateValue.length;

    //如果满足下面判断的所有条件才算合法的日期,否则不合法

    if(checkNumeric(inputDateValue) && checkLegth(inputValueLength) && checkSpecialChar(inputDateValue) ) {

       return true;

    }else {

errorMessage("请输入合法的" + desc +"\n类型为日期,格式为YYYY-MM-DD 或者YYYYMMDD");

       Field.focus();

       return false;

    }

}

//日期只能是8~10

function checkLegth(length) {

    if(length < 8 || length > 10) {

       return false;

    }

    return true;

}

//如果输入的内容中包含‘-’,则按照‘-’分割来去年月日,否则直接按照位数取

function checkSpecialChar(inputDateValue) {

    var index = inputDateValue.indexOf('-');

    var year = 0;

    var month = 0;

    var day = 0;

    if(index > -1) {

       var lastIndex = inputDateValue.lastIndexOf('-');

       //只能是YYYY-M-DD或者YYYY-MM-DD的形式

       if(lastIndex - index < 1 || lastIndex - index > 3) {

           return false;

       }

       var arrDate = inputDateValue.split('-');

           year = arrDate[0];

           month = arrDate[1];

           day = arrDate[2];

       } else {

           year = inputDateValue.substring(0,4);

           month = inputDateValue.substring(4,6);

           day = inputDateValue.substring(6,8);

       }

       if(Number(month) > 12 || Number(day) > 31 ||Number(month)<1

                           || Number(day)<1 ||  year.length != 4) {

           return false;

    } else  if(day > getLastDayOfMonth(Number(year),Number(month))) {

           return false;

    }

    return true;

}

//判断输入的内容将‘-’替换成为数字1后,是否全部为数字

function checkNumeric(inputDateValue) {

    var replacedValue = inputDateValue.replace(/-/g,'1');

    return isNumeric(replacedValue);

}

//判断是否为数字

function isNumeric(strValue)

{

  var result = regExpTest(strValue,/\d*[.]?\d*/g);

  return result;

}

 

function regExpTest(source,re)

{

  var result = false;

 

  if(source==null || source=="")

    return false;

 

  if(source==re.exec(source))

    result = true;

 

  return result;

}

 

//获得一个月中的最后一天

function getLastDayOfMonth(year,month){

    var days=0;

    switch(month){

    case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break;

    case 4: case 6: case 9: case 11: days=30;break;

    case 2: if(isLeapYear(year)) days=29;else days=28;break;

    }

    return days;

}

//判断是否为闰年

function isLeapYear(year){

    if((year %4==0 && year %100!=0) || (year %400==0)) return true;

    else return false;

}

转载于:https://www.cnblogs.com/gmq/archive/2009/07/18/1526216.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值