DateTime.Parse を使用して文字列をフォーム ポストから DateTime に変換する .NET の DefaultModelBinder で動作するバリデータを構築しようとしています。日付がサーバーに投稿されて、それが悪い日付であることに気付くまで待つ必要はありません。
現在、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 のひどい Date パーサーにより、次のようになります。
275481/69/100089
275760 年 9 月 12 日まで有効と評価されます。
一方、これは:
2013 年 11 月 19 日
無効と評価されます。
もちろん、C# の DateTime.Parse() はカルチャ (ローカリゼーション) やうるう年などを考慮に入れていることを理解しており、固定 (米国) カルチャを想定して、クライアントで "02-29-2013" を許可しても問題ありません。サーバーでそれを追い出します(理想的にはそうではありませんが、許容できます)。
しかし、C# の DateTime.Parse() ロジックで動作する、より優れた日付バリデーターを誰かがまとめていないなんて信じられません。
誰かが持っているかもしれませんが、私は見つけられなかったので、ここに投稿しています。
信じられないほど単純な (精度が低い) ものから信じられないほど複雑な (精度が高い) まで、これにはいくつかの方法があることはわかっていますが、誰かがすでにこの道をたどり、スイート スポットを見つけていることを願っています。