jQuery验证(日期范围)

时间:2010-09-21 14:13:31

标签: jquery jquery-plugins jquery-validate

我正在使用jQuery validate插件,并想知道是否有办法验证输入到字段中的日期是否是yyyy-mm-dd之类的日期且日期是2010年11月29日至2010年12月15日之间

我是jQuery的新手,所以如果有答案,请尽可能地愚弄答案,以便我能够完成它。非常感谢任何/所有建议

6 个答案:

答案 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}."))

有关示例,请参阅jQuery验证source方法的range

答案 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>