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);
}, "请输入正确的日期");

你可能感兴趣的:(JS框架)