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;
input绑定onblur事件//如果满⾜下⾯判断的所有条件才算合法的⽇期,否则不合法
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 = place(/-/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;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。