我正在使用jQuery validate插件,并想知道是否有办法验证输入到字段中的日期是否是yyyy-mm-dd之类的日期且日期是2010年11月29日至2010年12月15日之间
我是jQuery的新手,所以如果有答案,请尽可能地愚弄答案,以便我能够完成它。非常感谢任何/所有建议
答案 0 :(得分:9)
如果你想要一个可重复使用的函数,你可以扩展Emily和lonesomeday的答案以允许提供一个参数:
$.validator.addMethod('daterange', function(value, element, arg) {
// Same as above
var startDate = Date.parse(arg[0]),
endDate = Date.parse(arg[1]),
enteredDate = Date.parse(value);
// Same as below
}, $.validator.format("Please specify a date between {0} and {1}."))
答案 1 :(得分:7)
我从未使用过验证插件,但通过API查看这样的内容可能会有效:
$.validator.addMethod('daterange', function(value, element) {
if (this.optional(element)) {
return true;
}
var startDate = Date.parse('2010-11-29'),
endDate = Date.parse('2010-12-15'),
enteredDate = Date.parse(value);
if (isNan(enteredDate)) {
return false;
}
return ((startDate <= enteredDate) && (enteredDate <= endDate));
});
我认为,您需要将daterange
类添加到相应的元素中。
答案 2 :(得分:5)
lonesomeday的答案非常接近,只有一些调整。我会按如下方式结束代码:
if(isNaN(enteredDate)) return false;
return ((startDate <= enteredDate) && (enteredDate <= endDate));
}, "Please specify a date between 2010-11-29 and 2010-12-15");
这会修复isNaN功能,并向用户提供错误消息,以便他们知道您要查找的内容。
答案 3 :(得分:2)
在Connor的代码中进行了一些小修改。
生成的工作代码为:
$.validator.addMethod('daterange', function(value, element, arg) {
if (this.optional(element) && !value) {
return true;
}
var startDate = Date.parse(arg[0]),
endDate = Date.parse(arg[1]),
enteredDate = Date.parse(value);
if (isNaN(enteredDate)) {
return false;
}
return ( (isNaN(startDate) || (startDate <= enteredDate)) &&
(isNaN(endDate) || (enteredDate <= endDate)));
}, $.validator.format("Please specify a date between {0} and {1}."));
然后像这样使用它:
$("#some_date_input").rules("add",{daterange:['01/31/2001','01/31/2020']});
答案 4 :(得分:2)
抱着你的马,伙计们! :)
不要忘记,Date.parse无法正常使用不同的语言环境,它只能正确解析特定的日期格式。
如果您使用各种日期格式(特定于文化) - 最好坚持使用jquery datepicker日期处理。
因此,假设您已经加载了正确的特定于文化的jquery datepicker对象(例如,jquery.ui.datepicker-nb-NO.js,其中日期格式为DD.MM.yyyy且未被Date解析.parse)并初始化它,正确的方法是:
$.validator.addMethod('dateRange', function (value, element, parameterValue) {
if (this.optional(element) && !value) {
return true;
}
var dateFormat = $(element).datepicker('option', 'dateFormat');
try {
var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime();
var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime();
var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime();
return (startDate <= enteredDate) && (enteredDate <= endDate);
} catch (error) {
return true;
}
});
我已将parseDate内容放入try块中,因为没有正常的方法可以判断日期是否已正确解析。
答案 5 :(得分:0)
min
类型max
上的日期范围date
/ input
属性
<!--jquery validate-->
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/additional-methods.min.js"></script>
<input id="christmas-shopper-reservation" type="date" min="2010-11-29" max="2010-12-15">
<label id="christmas-shopper-reservation-error" class="error" style="display:none;" for="christmas-shopper-reservation"></label>