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

Tom*_*han 2 jquery jquery-plugins jquery-validate

在jQuery验证插件有几个是做同样的事情的方法,但对于不同的区域,例如dateISOdateDE,这两个验证日期格式.如何结合这些使输入元素接受要么

假设<input type="text" name="dateInput" id="dateInput" />我的表单中有一个,我想允许用户只输入此字段中的日期.不过,我想,以使几个不同的日期格式-比如,用户应该能够进入任何一个ISO日期 accoding德国日期规则格式化的日期.

如果我做

rules: { dateInput: { required: true, dateISO: true, dateDE: true } }
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*ver 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");
Run Code Online (Sandbox Code Playgroud)

现在我没有datedateDE这里,因为在更新版本的插件dateDE被删除.它现在位于本地化文件中,只是覆盖了该date方法.如果您使用的是旧版本,那就好了,坚持下去dateDE.

你可以在这里试一下


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

$.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");
Run Code Online (Sandbox Code Playgroud)

规则看起来像这样:

$("form").validate({
  rules: {
    dateFieldName: { oneOf: { dateISO:true, date:true } }
  }
});
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试一个演示,这需要任意数量的验证器功能并运行它们,至少有一个必须返回true才能成功.