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

还是以前同时发表在[url=http://ajaxcn.org/comments/start/2006-05-24/1]ajaxcn.org[/url]上的一片小文, 不过后来一哥们儿回了更简便的方法


因为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; }


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

正则万岁哈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值