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/


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);

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/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.