为Validation.js增加中文日期验证

阅读更多
还是以前同时发表在 ajaxcn.org上的一片小文, 不过后来一哥们儿回了更简便的方法


因为validation.js自带的是澳大利亚日期格式验证,如果需要对中文日期(yyyy-mm-dd, yyyy/mm/dd, yyyy.mm.dd)进行验证,就需要自己进行扩展,下面就是我做的一个扩展,如有不足请大家指正!
Validation.add('validate-date-cn', 'Please use this date format: yyyy/mm/dd. For example 2006/03/17 for the 17th of March, 2006.', function(v){
    /*-- 日期格式:(四位)年份 + (至多两位)月份 + (至多两位)日期 --*/ 
     if(!/d{4}[.-/]d{1,2}[.-/]d{1,2}/.test(v)) 
     { 
      return false; 
     }     /*-- 各月的天数 --*/ 
     var MonthDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);     /*-- 提取年月日的值 --*/ 
     var tempArray = v.split(/[.-/]/);     var mYear = tempArray[0]; 
     var mMonth = tempArray[1];
     var mDay = tempArray[2];     /*-- 判断年份 --*/ 
     if(mYear <= 0 || mYear > 9999) 
     { 
      return false;
     }     /*-- 判断月份 --*/ 
     if(mMonth <= 0 || mMonth > 12) 
     { 
      return false; 
     }     /*-- 计算所在月的正确天数 --*/ 
     var RightDay = 0;
     if(mMonth == 2) 
      RightDay = (((mYear%4 == 0) && (mYear%100 != 0) || (mYear%400 == 0))? 29: 28);
     else 
      RightDay = MonthDays[mMonth-1];     /*-- 判断日 --*/ 
     if(mDay <= 0 || mDay > RightDay) 
     { 
      return false;
     }     /*-- 格式和值均正确,返回真 --*/ 
     return true;


更简单的做法:
/* 日期格式:(四位)年份 + (至多两位)月份 + (至多两位)日期 */ if(!/^(?:([0-9]{4}-(?:(?:0?[1,3-9]|1[0-2])-(?:29|30)|((?:0?[13578]|1[02])-31)))|([0-9]{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1d|2[0-8]))|(((?:(dd(?:0[48]|[2468][048]|[13579][26]))|(?:0[48]00|[2468][048]00|[13579][26]00))-0?2-29)))$/.test(v)) { alert('false'); return false; }


这个是已经把闰年啊什么的都考虑进去的正则。

正则万岁哈。

你可能感兴趣的:(JavaScript)