moment.js isValid funkcja nie działa poprawnie

81

Mam takie pytanie ... Nie znalazłem nic podobnego i wydaje się też bardzo dziwne, że nikt nie miał tego problemu z walidacją czasu z moment.js.

moment('03:55', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm',true).isValid(); //true

czy robię coś źle? Oto przykład:

http://jsfiddle.net/vCGAp/145/

Mikel Sanchez
źródło
3
Mogę się tylko domyślać, że jawnie sprawdzają, czy przekazywany przez Ciebie format jest testowany ... ale nie ma sprawdzania, czy „czy wartość ma taką samą długość jak format?” ... Proponuję spróbować przesłać raport o błędzie do momentu.js
scunliffe
... dlaczego w pierwszej kolejności masz te dodatkowe postacie? Czy poprawnie sprawdza poprawność dłuższych ciągów dat w tym formacie?
Mathletics
co masz na myśli mówiąc o dodatkowych postaciach?
Mikel Sanchez

Odpowiedzi:

178

W swoim pytaniu piszesz, że moment('03:55jojojo', 'HH:mm',true).isValid();zwraca prawdę. To jest niepoprawne. Sprawdź ponownie swoje jsfiddle.

Od http://momentjs.com/docs/

Parser Momenta jest bardzo wyrozumiały, a to może prowadzić do niepożądanego zachowania. Od wersji 2.3.0 możesz określić wartość logiczną dla ostatniego argumentu, aby Moment używał ścisłego parsowania. Ścisłe analizowanie wymaga dokładnego dopasowania formatu i danych wejściowych.

moment('It is 2012-05-25', 'YYYY-MM-DD').isValid();        // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid();  // false
moment('2012-05-25', 'YYYY-MM-DD', true).isValid();        // true

Możesz używać zarówno języka, jak i surowości.

moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);
Jan Sommer
źródło
1
true (index): 26 true (index): 27 true (index): 29 To jest wyjście dziennika konsoli: S
Mikel Sanchez
Jeśli sprawdzisz jsfiddle, zauważysz, że NIE przekazujesz prawdy jako trzeciego argumentu nigdzie, ale w swoim pytaniu stwierdzasz, że moment('03:55jojojo', 'HH:mm',true).isValid();zwraca prawdę. Uruchom dokładnie ten kod w przeglądarce - wynik jest fałszywy.
Jan Sommer
3
Człowieku, dziękuję bardzo, ten trzeci parametr prawdy wielokrotnie uratował mi życie, chciałem tylko to powiedzieć, ponieważ zawsze wracam do tej odpowiedzi.
Kadaj
moment („13/13/2000”). isValid () zwraca wartość true. Musisz podać oznaczenie formatu, aby został prawidłowo zweryfikowany.
Kentonbmax
Dzięki. W końcu znalazłem odpowiedź, która jest poprawna. Brakuje mi też trzeciego parametru.
Shwe
1

Przepraszam za necro to 5-letnie pytanie, ale rzeczywiście natknąłem się na przypadek, w którym monent nie działa poprawnie w odniesieniu do dokumentacji, używając wersji 2.24.0.

Formaty

Na zdjęciu widzimy, że na przykład Hpowinno się oceniać tylko do 0 - 23, ale jeśli używam moment('01', 'H', true).isValid()nadal to dostaję true.

Oto jsfiddle: https://jsfiddle.net/wofgst5v/

knnhcn
źródło