我需要以本地化格式(SK)验证日期,并且无法进行淘汰验证。
我正在使用: 杜兰达1.2.0 淘汰赛2.3.0 淘汰赛验证https://github.com/Knockout-Contrib/Knockout-Validation
我需要这样的工作:
var newStartDate = ko.observable()
.extend({
required: { message: 'Start date is required.' },
date: true,
formattedDate: { format: 'ddMMyyyy', delimiter: '.' }
});
然后,如果我调用newStartDate.isValid(),我会得到以下结果:
newStartDate("");
false (OK)
newStartDate("test");
false (OK)
newStartDate("2013-02-02");
true (Bad)
newStartDate("2.2.2013");
false (Bad)
结果应该是:
newStartDate("2013-02-02");
false
newStartDate("2.2.2013)"; // or "2. 2. 2013"
true
我在扩展功能中有一些自定义验证的解决方案,但这不是我想要的。 我想阻止上面的工作,它也更短。
答案 0 :(得分:12)
为什么不...... 对我的用途来说,日期规则似乎有点过于宽松。如果您喜欢片刻但希望调用者更清洁,请将您的规则添加到validation.rules对象:
ko.validation.rules['simpleDate'] = {
validator: function (val, validate) {
return ko.validation.utils.isEmptyVal(val) || moment(val, 'MM/DD/YYYY').isValid();
},
message: 'Invalid date'
};
然后使用它:
var someDate= ko.observable().extend({ simpleDate: true });
答案 1 :(得分:2)
此为时已晚,但只想分享@ChoptimusPrime的答案。不格式化格式:
ko.validation.rules['dateAndFormat'] = {
validator: function (val, format) {
return ko.validation.utils.isEmptyVal(val) || moment(val, format).isValid();
},
message: 'Please provide a valid date.'
};
ko.validation.registerExtenders();
答案 2 :(得分:1)
我现在唯一有效的解决方案是在下面。
此验证器的问题在于它还将默认(EN)日期格式验证为有效,因此我必须添加IF以将其作为无效日期格式返回。
var dateValidator = function (val) {
if (!val)
return false;
if (moment(val, 'DD.MM.YYYY HH:mm').isValid()) {
return true;
}
else
return false;
};
var startDate = ko.observable().extend({ validation: { validator: dateValidator, message: 'Start of task is not in correct format.' } });