Функція moment.js isValid не працює належним чином


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

... чому у вас взагалі такі зайві символи? Чи правильно він перевіряє довші рядки дат щодо цього формату?
Mathletics

що ви маєте на увазі з зайвими символами?
Мікель Санчес,

Відповіді:


178

У своєму питанні ви пишете, що moment('03:55jojojo', 'HH:mm',true).isValid();повертає правду. Це неправильно. Перевірте свою 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 (індекс): 26 true (індекс): 27 true (індекс): 29 Це висновок журналу консолі: S
Мікель Санчес

Якщо ви перевірите свою jsfiddle, ви помітите, що ви ніде не передаєте true як третій аргумент, але у своєму запитанні ви вказуєте, що moment('03:55jojojo', 'HH:mm',true).isValid();повертає true. Будь ласка, запустіть цей точний код у своєму браузері - результат помилковий.
Ян Зоммер

3
Чоловіче, щиро дякую, цей третій параметр істини врятував мені життя кілька разів, просто хотів сказати, що, оскільки я постійно повертаюся до цієї відповіді.
Кададж

moment ('13 / 13/2000 '). isValid () повертає true. Для належної перевірки потрібно вказати позначення формату.
Kentonbmax

Дякую. Нарешті я знайшов правильну відповідь. Мені теж не вистачає третього параметра.
Шве

1

Вибачте, що некро про це 5-річне питання, але я справді натрапив на випадок, коли monent не працює належним чином щодо документації, використовуючи версію 2.24.0.

Формати

На малюнку ми бачимо, що, наприклад, Hслід оцінювати лише 0 - 23, але якщо я використовую, moment('01', 'H', true).isValid()я все одно отримую true.

Ось jsfiddle: https://jsfiddle.net/wofgst5v/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.