2013-08-23 27 views
1

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

formattedDate驗證規則來自哪裏?我在Knockout-Validation文檔的內置或用戶貢獻的自定義規則列表中看不到它。 – Limescale

+0

我在這裏找到了它,但我不是100%確定它是否在我的版本中,https://github.com/neildonkin/Knockout-Validation/commit/25d132f1ec154118667d276c6c4a0dab5e94758b – user2711254

回答

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.' } });

+1

Downvoted,這甚至使用基因敲除驗證規則。它可能工作,但肯定不是KOJS的方式。 –

11

有點晚了,爲什麼不... 日期規則似乎有點太寬容我的用途。如果你喜歡時刻,但想要的東西吸塵器清潔來電者,請將您的規則到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 }); 
+0

+1使用驗證規則和momentjs。 –

+0

[投票]謝謝,我已經擴大你的答案與傳遞的格式,以便它可以在其他地方重複使用。 – hofnarwillie

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();