jQuery日期验证 - 格式和范围

时间:2013-06-14 01:23:50

标签: jquery validation date jquery-validate

我有一个要求,我将有2个日期字段(tofrom)并需要验证它们:

  • 是否为mm / dd / yyyy格式
  • 两个日期都在特定范围内
  • 顾名思义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])));
});

2 个答案:

答案 0 :(得分:2)

我们已经完全解决了这个问题。您需要做的是创建一系列验证规则。 首先,你给日期一些适当的类属性 - 比如“fromDate”和“toDate”。

  • 使用正则表达式确保格式正确的
  • 使用javascript Date对象进行日期转换的一个,并确保它们在正确的范围内。
  • 一个用于起始日期,知道如何查找到期日(通常通过上升一两级,然后在其上运行.find('input.toDate'))或类似处理,并进行比较。
  • 另一个,反过来,为迄今为止。
  • 如果两者都为空则返回true,但如果一个为空而另一个为空
  • 则返回false

然后使用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));
});