将jQuery Validation插件中的验证方法与“或”而不是“和”相结合

时间:2010-06-29 07:22:49

标签: jquery jquery-plugins jquery-validate

在jQuery Validation插件中有几种方法可以做同样的事情,但对于不同的语言环境,例如dateISOdateDE,它们都验证日期格式。如何组合这些以使输入元素接受

假设我的表单中有<input type="text" name="dateInput" id="dateInput" />,我想允许用户只在此字段中输入日期。但是,我想允许几种不同的日期格式 - 例如,用户应该能够输入 ISO日期格式化日期日期规则的日期。

如果我这样做

rules: { dateInput: { required: true, dateISO: true, dateDE: true } }

表单永远不会有效,因为两种日期格式都是必需的,并且永远无法满足该要求。有没有办法将这些组合为“或”而不是“和”,而不必编写我自己的验证方法?

如果我必须自己编写,我该如何使其尽可能通用?

2 个答案:

答案 0 :(得分:5)

虽然你可以像Reigel一样组合正则表达式,你也可以直接调用这些方法(如果它们改变了!),如下所示:

$.validator.addMethod("dateISODE", function(value, element) { 
    return $.validator.methods.dateISO.apply(this, arguments) 
        || $.validator.methods.date.apply(this, arguments); 
}, "Please enter a valid ISO or German date");

现在我在date而不是dateDE,因为在新版本的插件dateDE was removed中。它现在位于localization file,只是覆盖了date方法。如果您使用的是旧版本,那么请坚持使用dateDE

You can try a demo here


评论更新:更通用的表单如下所示:

$.validator.addMethod("oneOf", function(value, element, params) {
  for(p in params) {
    if(params.hasOwnProperty(p) && 
       $.validator.methods[p].apply(this, [value, element, params[p]]))
      return true;
  }
  return false;
}, "Please enter a valid date");

规则如下:

$("form").validate({
  rules: {
    dateFieldName: { oneOf: { dateISO:true, date:true } }
  }
});

You can try a demo here,这需要任意数量的验证器函数并运行它们,至少有一个函数必须返回true才能成功。

答案 1 :(得分:0)

dateISO: function(value, element) {
     return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
},
dateDE: function(value, element) {
     return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
}

source

让它结合起来......:)

jQuery.validator.addMethod("dateISOorDE", function(value, element) { 
    return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value); 
}, "Please specify the correct date");