moment.jsisValid関数が正しく機能していません


81

私はこの質問があります...私は似たようなものを見つけていません、そしてまた、moment.jsで時間を検証するこの問題を誰も持っていなかったのは非常に奇妙に思えます。

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

私は何か間違ったことをしていますか?次に例を示します。

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


3
合格したフォーマットがテストされていることを明示的にテストしていると推測できます...しかし、「値はフォーマットと同じ長さですか?」のチェックはありません...バグレポートをmoment.jsに送信してみることをお勧めします
scunliffe 2013年

...そもそもなぜこれらの余分なキャラクターがいるのですか?その形式に対して長い日付文字列を正しく検証しますか?
Mathletics 2013年

余分な文字とはどういう意味ですか?
Mikel Sanchez

回答:


178

あなたの質問でmoment('03:55jojojo', 'HH:mm',true).isValid();は、trueを返すと書きます。これは正しくありません。jsfiddleをもう一度確認してください。

http://momentjs.com/docs/から

モーメントのパーサーは非常に寛容であり、これは望ましくない動作につながる可能性があります。バージョン2.3.0以降、Momentが厳密な解析を使用するように、最後の引数にブール値を指定できます。厳密な解析では、形式と入力が完全に一致している必要があります。

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

言語と厳密さの両方を使用できます。

moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);

1
true(インデックス):26true(インデックス):27true(インデックス):29これはコンソールログ出力です:S
Mikel Sanchez

jsfiddleをチェックすると、3番目の引数としてtrueをどこにも渡していないことに気付くでしょうが、質問でmoment('03:55jojojo', 'HH:mm',true).isValid();はtrueを返すと述べています。その正確なコードをブラウザで実行してください-出力はfalseです。
Jan Sommer

3
男、どうもありがとう、この真の3番目のパラメーターは、私の命を何度も救いました。私はいつもこの答えに戻ってくるので、言いたかっただけです。
カダージュ2016年

moment('13 / 13/2000 ')。isValid()はtrueを返します。正しく検証するには、フォーマット指定を含める必要があります。
Kentonbmax 2018

ありがとう。私はついに正しい答えを見つけました。3番目のパラメーターもありません。
シュエ

1

この5年前の質問を壊して申し訳ありませんが、バージョン2.24.0を使用して、monentがドキュメントに対して適切に機能していないケースに実際に遭遇しました。

フォーマット

写真では、たとえば、とH評価するだけでよいことがわかります0 - 23が、使用するmoment('01', 'H', true).isValid()と、まだtrue

これがjsfiddleです:https://jsfiddle.net/wofgst5v/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.