Запуск момента .js, 2.2.1
moment("2010-10-319", ["YYYY-MM-DD"]).isValid()
... возвращает true
, а объект момента будет установлен до 31 октября 2010 года. Парсер, кажется, разделяет посторонние символы любого типа:
moment("2010-10-31a", ["YYYY-MM-DD"]).isValid(); // true
Любопытно, если вы добавите дополнительные варианты выбора формата, тогда "зачистка" будет ограничена только одним символом! (Не следует ли проверять строковые строки формата?)
moment("2010-10-319", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true
moment("2010-10-3199", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // false (!!!)
Это поведение по дизайну? Я не понимаю, почему.
EDIT: комментатор обнаружил другой случай, когда лишние символы за пределами, действительно, лишены:
moment("2010-10-319qr", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true (!)
Вот что находится в действии: http://jsfiddle.net/grahampcharles/r42jg/6/ (обновлено в новом случае)