2013-11-14 17 views
63

私はこの質問をしています...私は何も似たものを見つけていないし、誰もこの問題にmoment.jsで時間を検証していないことは非常に奇妙です。moment.js isValid関数が正しく動作しない

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

+0

...なぜあなたは最初にそれらの余分な文字を持っていますか?その形式に対してより長い日付文字列を正しく検証しますか? – Mathletics

+0

余分な文字はどういう意味ですか? –

答えて

140

あなたはmoment('03:55jojojo', 'HH:mm',true).isValid();がtrueを返すことを書きます。これは間違っています。あなたのjsfiddleをもう一度チェックしてください。

http://momentjs.com/docs/

から一瞬のパーサは非常に寛容であり、これは望ましくない 行動につながることができます。バージョン2.3.0以降では、最後の 引数にブール値を指定して、モーメントが厳密な解析を使用できるようにすることができます。厳密な解析を行うには、フォーマットと入力が正確に一致するように が必要です。

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(index):26 true(index):27 true(index):29 これはコンソールログ出力です。S –

+0

jsfiddleを確認すると、 ('03:55jojojo '、' HH:mm '、true).isValid(); 'はtrueを返します。ブラウザでそのコードを実行してください。出力はfalseです。 –

+1

男、本当にこの3番目のパラメータは、複数回私の人生を保存して、多くのありがとう、私はいつもこの答えに戻ってくるので、それを言いたかった。 – Kadaj

関連する問題