我正在尝试构建一个验证器,该验证器将与 .NET 的 DefaultModelBinder 一起使用,使用 DateTime.Parse 将字符串从表单发布转换为 DateTime。我不想等到某个日期发布到服务器后才意识到这是一个糟糕的日期。
目前 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 日。
另一方面,这是:
11-19-2013
将评估为无效。
当然,我知道 C# 的 DateTime.Parse() 考虑了文化(本地化)和闰年之类的东西,我可以假设一个固定的(美国)文化,并在客户端上允许“02-29-2013”并在服务器上将其踢出(理想情况下不是,但这是可以接受的)。
但我不敢相信有人没有组合一个更好的日期验证器来使用 C# 的 DateTime.Parse() 逻辑。
也许有人有,我只是还没找到——这就是我在这里发帖的原因。
而且我知道我有几种方法可以解决这个问题——从非常简单(不太准确)到非常复杂(更准确),但我希望有人已经走上了这条路并找到了最佳点。