我有一个要求,我将有2个日期字段(to
,from
)并需要验证它们:
to
应始终大于from
实现相同的最佳方法是什么,使用jquery验证api
注意:我确实在jQuery Date Validation (YYYY-MM-DD)等某些链接上阅读了有关格式验证的内容,但这些内容并未确保其有效日期我最终可能会输入02/31/2999
之类的内容
我试过
jQuery.validator.addMethod("DateFormat", function(value, element) {
var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
var values = value.split("/");
return this.optional(element) || (value.test(date_regex) && (new Date(values[2], values[0], values[1])));
});
答案 0 :(得分:2)
我们已经完全解决了这个问题。您需要做的是创建一系列验证规则。 首先,你给日期一些适当的类属性 - 比如“fromDate”和“toDate”。
.find('input.toDate'))
或类似处理,并进行比较。然后使用jQuery.validate.addClassRules()
将适当的规则分配给相应的类。
在相关表单上设置验证器之前,先将所有代码放入其中,它应该可以正常工作。语法留给读者练习。
答案 1 :(得分:0)
添加了以下验证方法
// jquery validation method to validate date format
jQuery.validator.addMethod("DateFormat", function(value, element) {
var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
var comp = value.split('/');
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var date = new Date(y,m,d);
return this.optional(element) || (date_regex.test(value) && date.getFullYear() == y && date.getMonth() == m && date.getDate() == d);
});
//jquery validation method to validate date range
jQuery.validator.addMethod("DateToFrom", function(value, element, arg0, arg1) {
var comp = value.split('/');
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var currentEltdate = new Date(y,m,d);
comp = $("#"+arg0).val().split('/');
m = parseInt(comp[0], 10);
d = parseInt(comp[1], 10);
y = parseInt(comp[2], 10);
var otherEltDate = new Date(y,m,d);
var lowerDate, upperDate;
if(arg1 == true){//current element should be lower date
lowerDate = currentEltdate;
upperDate = otherEltDate;
}else{
lowerDate = otherEltDate;
upperDate = currentEltdate;
}
return this.optional(element) || (lowerDate <= upperDate);
});
// jquery validation method to validate date range
jQuery.validator.addMethod("DateRange", function(value, element, arg0, arg1) {
var comp = arg0.split('/');
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var startDate = new Date(y,m,d);
comp = arg1.split('/');
m = parseInt(comp[0], 10);
d = parseInt(comp[1], 10);
y = parseInt(comp[2], 10);
var endDate = new Date(y,m,d);
comp = value.split('/');
m = parseInt(comp[0], 10);
d = parseInt(comp[1], 10);
y = parseInt(comp[2], 10);
var date = new Date(y,m,d);
return this.optional(element) || ((startDate <= date) && (date <= endDate));
});