淘汰日期验证工作不正常

Knockout date validation not working correctly

本文关键字:不正常 工作 验证 日期 淘汰      更新时间:2023-09-26

我需要以本地化格式(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

我有一些在扩展函数内部进行自定义验证的解决方案,但这不是我想要的。我想让上面的方块工作,它也更短。

为什么不。。。对于我来说,日期规则似乎也有点过于宽松了。若您喜欢moment,但想要给调用者一些更干净的东西,请将您的规则添加到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 });

很晚了,但我只想分享我对@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();

我目前唯一可用的解决方案如下。这个验证器的问题是,它还将默认(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.' } });