moment.js isValid Funktion funktioniert nicht richtig

81

Ich habe diese Frage ... Ich habe nichts Ähnliches gefunden und es scheint auch sehr seltsam, dass niemand dieses Problem hatte, die Zeit mit moment.js zu validieren.

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

Mache ich etwas falsch? Hier ist ein Beispiel:

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

Mikel Sanchez
quelle
3
Ich kann nur vermuten, dass sie explizit testen, ob das von Ihnen übergebene Format getestet wurde ... aber es gibt keine Überprüfung auf "Ist der Wert genauso lang wie das Format?" ... Ich würde vorschlagen, einen Fehlerbericht an moment.js zu senden
Scunliffe
... warum hast du diese zusätzlichen Charaktere überhaupt? Überprüft es längere Datumszeichenfolgen korrekt anhand dieses Formats?
Mathletics
Was meinst du mit zusätzlichen Charakteren?
Mikel Sanchez

Antworten:

178

In Ihrer Frage schreiben Sie, dass moment('03:55jojojo', 'HH:mm',true).isValid();true zurückgegeben wird. Das ist falsch. Bitte überprüfen Sie Ihre jsfiddle erneut.

Von http://momentjs.com/docs/

Der Parser von Moment ist sehr verzeihend und dies kann zu unerwünschtem Verhalten führen. Ab Version 2.3.0 können Sie einen Booleschen Wert für das letzte Argument angeben, damit Moment eine strikte Analyse verwendet. Für eine strikte Analyse müssen Format und Eingabe genau übereinstimmen.

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

Sie können sowohl Sprache als auch Strenge verwenden.

moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);
Jan Sommer
quelle
1
true (Index): 26 true (Index): 27 true (Index): 29 Dies ist die Konsolenprotokollausgabe: S
Mikel Sanchez
Wenn Sie Ihre jsfiddle überprüfen, werden Sie feststellen, dass Sie nirgendwo als drittes Argument true übergeben, aber in Ihrer Frage geben Sie an, dass moment('03:55jojojo', 'HH:mm',true).isValid();true zurückgegeben wird. Bitte führen Sie genau diesen Code in Ihrem Browser aus - die Ausgabe ist falsch.
Jan Sommer
3
Mann, vielen Dank, dieser dritte Parameter von true hat mir mehrmals das Leben gerettet, wollte das nur sagen, da ich immer wieder auf diese Antwort zurückkomme.
Kadaj
moment ('13 / 13/2000 '). isValid () gibt true zurück. Sie müssen die Formatbezeichnung angeben, damit sie ordnungsgemäß validiert werden kann.
Kentonbmax
Vielen Dank. Ich habe endlich die richtige Antwort gefunden. Mir fehlt auch der dritte Parameter.
Shwe
1

Es tut mir leid, diese 5 Jahre alte Frage zu nekrotisieren, aber ich bin tatsächlich auf einen Fall gestoßen, in dem monent mit Version 2.24.0 nicht richtig auf die Dokumentation hinarbeitet.

Formate

Auf dem Bild können wir sehen, dass zum Beispiel Hnur zu bewerten ist 0 - 23, aber wenn ich benutze, moment('01', 'H', true).isValid()bekomme ich immer noch true.

Hier ist die jsfiddle: https://jsfiddle.net/wofgst5v/

knnhcn
quelle