不好意思,发的太快了,现在版本就升级了,呵呵!//检测输入的日期值是否合法,不合法就返回错误原因
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 "日期格式不对";
}

解决方案 »

  1.   

    if (yy<DateObj.getYear())
          return "日期是今年以前的年份";今年以前的为什么就不验证月和日了?此外可以试试这个:alert(checkDateValue("98765432003-3-055"))
      

  2.   

    又一次改正,欢迎大家多提建议阿:(1)针对 emu(ston)提出的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?这是原来使用来验证字符的正则表达式,一时忽略,不过在这里根本就不出现影响。
      

  3.   

    注意\在字符串中需要转义:\\var re = new RegExp("^(\\d{4})-(\\d{1,2})-(\\d{1,2})$","");或者re=/^(\d{4})-(\d{1,2})-(\d{1,2})$/