【问题标题】:Knockout date validation not working correctly淘汰日期验证无法正常工作
【发布时间】:2013-08-26 15:27:36
【问题描述】:

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

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

【问题讨论】:

  • formattedDate 验证规则从何而来?我在 Knockout-Validation 文档的内置或用户贡献的自定义规则列表中没有看到它。
  • 我在这里找到了它,但我不确定它是否在我的版本中,github.com/neildonkin/Knockout-Validation/commit/…

标签: javascript validation date knockout.js durandal


【解决方案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: '开始的任务格式不正确。' } });

【讨论】:

  • 投反对票,即使使用淘汰赛验证规则也是如此。它可能有效,但绝对不是 KOJS 的方式。
【解决方案2】:

有点晚了,为什么不... 日期规则对我的使用似乎也有点过于宽松。如果您喜欢时刻,但希望调用者更清晰,请将您的规则添加到 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 });

【讨论】:

【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2014-07-19
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多