在jQuery Validation插件中有几种方法可以做同样的事情,但对于不同的语言环境,例如dateISO
和dateDE
,它们都验证日期格式。如何组合这些以使输入元素接受 ?
假设我的表单中有<input type="text" name="dateInput" id="dateInput" />
,我想允许用户只在此字段中输入日期。但是,我想允许几种不同的日期格式 - 例如,用户应该能够输入 ISO日期或格式化日期日期规则的日期。
如果我这样做
rules: { dateInput: { required: true, dateISO: true, dateDE: true } }
表单永远不会有效,因为两种日期格式都是必需的,并且永远无法满足该要求。有没有办法将这些组合为“或”而不是“和”,而不必编写我自己的验证方法?
如果我必须自己编写,我该如何使其尽可能通用?
答案 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
。
评论更新:更通用的表单如下所示:
$.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);
}
让它结合起来......:)
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");