不好意思,发的太快了,现在版本就升级了,呵呵!//检测输入的日期值是否合法,不合法就返回错误原因
function checkDateValue(DateStr)
{
if (!DateStr)
return "日期不能为空"; var DateObj=new Date();
var maxDays=31;
var re = new RegExp("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})","ig");
if (re.test(DateStr))
{
var yy=parseInt(RegExp.$1);
//判断输入年份是否为今年以前的年份
if (yy<DateObj.getYear())
return "日期是今年以前的年份"; var mm=parseInt(RegExp.$2);
if (mm<1||mm>12)
return "日期月份错误";
//取得当前月份的最大日期值
if (mm==4||mm==6||mm==9||mm==11)
maxDays = 30;
else if(mm==2)
{
if ((yy%4)>0)
maxDays=28;
else if((yy%100)==0 && yy%400>0)
maxDays=28;
else
maxDays=29;
} var dd=parseInt(RegExp.$3);
if ((dd<1)||(dd>maxDays))
return "日期的该月没有"+dd+"日";
//如果通过验证就返回空字串
return "";
}
else
return "日期格式不对";
}
function checkDateValue(DateStr)
{
if (!DateStr)
return "日期不能为空"; var DateObj=new Date();
var maxDays=31;
var re = new RegExp("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})","ig");
if (re.test(DateStr))
{
var yy=parseInt(RegExp.$1);
//判断输入年份是否为今年以前的年份
if (yy<DateObj.getYear())
return "日期是今年以前的年份"; var mm=parseInt(RegExp.$2);
if (mm<1||mm>12)
return "日期月份错误";
//取得当前月份的最大日期值
if (mm==4||mm==6||mm==9||mm==11)
maxDays = 30;
else if(mm==2)
{
if ((yy%4)>0)
maxDays=28;
else if((yy%100)==0 && yy%400>0)
maxDays=28;
else
maxDays=29;
} var dd=parseInt(RegExp.$3);
if ((dd<1)||(dd>maxDays))
return "日期的该月没有"+dd+"日";
//如果通过验证就返回空字串
return "";
}
else
return "日期格式不对";
}
return "日期是今年以前的年份";今年以前的为什么就不验证月和日了?此外可以试试这个:alert(checkDateValue("98765432003-3-055"))
var re = new RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}$)","");(2)针对 emu(ston)提出的
if (yy<DateObj.getYear())
return "日期是今年以前的年份";今年以前的为什么就不验证月和日了?这是根据我的需要编写的,同时验证到这里我已经知道输入有误,没有必要再去深入验证。(3)针对 emu(ston)提出的
[0-9] == \d
这个我原来也是这样编写的代码,但是我使用\d写法就是不能实现等效应用,才改为[0-9],具体是什么原因还望指出。(4)针对 emu(ston)提出的
为什么要ig?这是原来使用来验证字符的正则表达式,一时忽略,不过在这里根本就不出现影响。