JQuery validate date 日期校验问题

  做JS API时,发现JQuery校验插件的一个时间校验问题。

  最终目的:输入一个字符串,校验如果是正确的日期,则通过,否则给出提示。

  做法:

$("#validateForm").validate({
				debug : true,
				rules : {"date" : {
						isDate : true
					     }
                                  },
				messages : {
					"date" : {
						date : "日期格式不正确"
					}
				}
  效果:输入201300 报错,2014/01/01 正确  2014-01-01正确  20140101错误,这个地方可以做格式转换

  问题:输入2016-04-31,竟然校验通过了,一脸黑线

  原因:特意调出了JQuery validate的框架代码,原来是通过校验new Date(value)来判断日期是否有效。

// http://docs.jquery.com/Plugins/Validation/Methods/date
		date: function(value, element) {
			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
		}
             然后,就试了一下new Date()函数
new Date("2016-04-31")
Sun May 01 2016 08:00:00 GMT+0800 (中国标准时间)
            new Date()会把4月31号直接转换成5月1号,只能说太智能了,但这种显然不是我们想要的效果

  解决方法:解决就从new Date()下手,转换成日期后,查出日期的月份,如果此时的月份和传入日期的月份不一致,说明日期又问题,解决!

//日期
jQuery.validator.addMethod("isDate", function(value, element){
	var ereg = /^(\d{1,4})(-|\/)(\d{1,2})(-|\/)(\d{1,2})$/;
	var r = value.match(ereg);
	if (r == null) {
		return false;
	}
	var d = new Date(r[1], r[3] - 1, r[5]);
	var result = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[5]);
	
	return this.optional(element) || (result);
}, "请输入正确的日期");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值