Próbuję zbudować walidator, który będzie działać z DefaultModelBinder .NET przy użyciu DateTime.Parse, aby przekonwertować ciąg z postu formularza na DateTime. Nie chcę czekać, aż na serwer zostanie wysłana data, aby zdał sobie sprawę, że była to zła data.JavaScript równoważne z .NET's DateTime.Parse
Obecnie jquery.validate wykorzystuje następujący kod do sprawdzania poprawności daty pola:
// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
Jednakże ze względu na funkcje Javascript straszne Data parser, to:
275481/69/100089
Zostanie oceniony jako ważny, do 12 września 275760.
Chociaż z drugiej strony, to:
11-19-2013
oceni jako nieprawidłowej.
Oczywiście, rozumiem, że C# 's DateTime.Parse() wykonuje takie rzeczy jak kultury (lokalizacja) i roku przestępnym pod uwagę, a ja mogłem żyć z zakładając stałą (US) kultury i umożliwiając „02-29-2013 "na kliencie i wyrzuć go na serwer (najlepiej nie, ale jest to dopuszczalne).
Ale nie mogę uwierzyć, że ktoś nie utworzył walidatora lepszej daty do pracy z logiką DateTime.Parse (C#).
Może ktoś ma, ja po prostu go nie znalazłem - dlatego zamieszczam tutaj.
Wiem, że mam na to kilka sposobów - od niewiarygodnie prostych (mniej dokładnych) po niewiarygodnie złożone (dokładniejsze), ale mam nadzieję, że ktoś już przeszedł tę drogę i znalazł to słodkie miejsce.
DateJS może być właściwe tutaj, ale wprawdzie, nawet wtedy nie jest idealnie. http://www.datejs.com/ –
regularne wyrażenia? –
@GrantH. Myślałem o date.js, ale jak powiedziałeś, wygląda na to, że ma swoje wady. To może być sposób, w jaki pójdę - prawdopodobnie w kombinacji w wyrażeniach regularnych - jeśli nie otrzymam lepszych sugestii tutaj. –