2

ローカライズされた形式 (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

拡張機能内にカスタム検証を使用するソリューションがありますが、それは私が望んでいるものではありません。上のブロックを機能させたいのですが、それも短いです。

4

3 に答える 3

13

少し遅いのはなぜですか...日付ルールは、私の用途にも少し寛容すぎるようです。瞬間が好きで、発信者にとってよりクリーンなものが必要な場合は、ルールを 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 });
于 2014-04-15T14:35:03.560 に答える
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();
于 2014-12-04T12:04:07.250 に答える
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.' } });

于 2013-09-02T14:13:14.933 に答える