将jQuery Validation插件中的validation方法与“或”而不是“和”相结合
在jQuery Validation插件中有几种方法可以做同样的事情,但对于不同的语言环境,例如dateISO
和dateDE
,它们都validation了日期格式。 我如何组合这些,以便输入元素接受?
假设我的表单中有 ,我想允许用户只在此字段中输入日期。 但是,我想允许几种不同的日期格式 – 例如,用户应该能够输入ISO日期或根据德国日期规则格式化的日期。
如果我做
rules: { dateInput: { required: true, dateISO: true, dateDE: true } }
表格将永远无效,因为两种日期格式都是必需的,并且永远无法满足该要求。 有没有办法将这些组合为“或”而不是“和”,而不必编写我自己的validation方法?
如果我必须自己编写,我该如何使它尽可能通用?
虽然你可以像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
被删除了 。 它现在位于一个本地化文件中 ,只是覆盖了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");
规则看起来像这样:
$("form").validate({ rules: { dateFieldName: { oneOf: { dateISO:true, date:true } } } });
你可以在这里尝试一个演示 ,这需要任意数量的validation器函数并运行它们,至少有一个必须返回true
才能成功。
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); }
资源
让它结合起来…… 🙂
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");