我想構建一個驗證器,它將使用.NET的DefaultModelBinder使用DateTime.Parse將表單帖子中的字符串轉換爲DateTime。我不想等到某個日期發佈到服務器上,才意識到這是一個糟糕的日期。Javascript等價於.NET的DateTime.Parse
目前jquery.validate使用下面的代碼來驗證日期字段:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
然而,由於JavaScript的可怕的日期解析器,這樣的:
275481/69/100089
將評估爲有效,至275760年9月12日。
而在另一方面,這樣的:
2013年11月19日
將評估爲無效。當然,我明白C#的DateTime.Parse()將文化(本地化)和閏年等事物考慮在內,我可以接受假設固定的(美國)文化,並允許「02-29-2013」 「在客戶端上,並在服務器上踢出去(理想情況下不是,但它是可以接受的)。
但我不敢相信有人沒有把更好的日期驗證器放在一起工作與C#的DateTime.Parse()邏輯。
也許有人有,我只是沒有找到它 - 這就是爲什麼我在這裏發佈。
而且我知道我有很多方法可以解決這個問題 - 從簡單(不太準確)到非常複雜(更準確),但是我希望有人已經走過這條路,找到了最佳位置。
DateJS可能是適當的在這裏,但不可否認,即使那樣,它也不完美。 http://www.datejs.com/ –
定期表達? –
@GrantH。我想過date.js,但正如你所說,它看起來有缺點。如果我在這裏沒有得到更好的建議,那可能就是我要走的路 - 可能與正規表達式結合使用。 –