moment.js验证无效日期"2013-10-311"

Gra*_*les 15 javascript date momentjs

运行moment.js,2.2.1

moment("2010-10-319", ["YYYY-MM-DD"]).isValid()
Run Code Online (Sandbox Code Playgroud)

...返回true,并将moment对象设置为2010年10月31日.解析器似乎剥离了任何类型的无关字符:

moment("2010-10-31a", ["YYYY-MM-DD"]).isValid(); // true
Run Code Online (Sandbox Code Playgroud)

Curiouser,如果你添加额外的格式选择,那么"剥离"仅限于一个角色!(格式字符串测试不应该是ORed吗?)

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 (!!!)
Run Code Online (Sandbox Code Playgroud)

这种行为是设计的吗?我不明白为什么.

编辑:评论者发现另一个案例,其中超出一个的额外字符确实被剥离:

moment("2010-10-319qr", ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"]).isValid(); // true (!)
Run Code Online (Sandbox Code Playgroud)

这是在行动:http://jsfiddle.net/grahampcharles/r42jg/6/(更新新案例)

tim*_*ood 19

Moment.js版本2.3.0添加了严格的解析.

moment("2010-10-319", ["YYYY-MM-DD"]).isValid();       // true
moment("2010-10-319", ["YYYY-MM-DD"], true).isValid(); // false

moment("2010-10-31a", ["YYYY-MM-DD"]).isValid();       // true
moment("2010-10-31a", ["YYYY-MM-DD"], true).isValid(); // false

var formats = ["MM/DD/YYYY", "MM-DD-YYYY", "YYYY-MM-DD"];

moment("2010-10-319",  formats).isValid(); // true
moment("2010-10-3199", formats).isValid(); // false

moment("2010-10-319",  formats, true).isValid(); // false
moment("2010-10-3199", formats, true).isValid(); // false

moment("2010-10-319qr", formats).isValid();       // true
moment("2010-10-319qr", formats, true).isValid(); // false
Run Code Online (Sandbox Code Playgroud)


squ*_*hel 3

从 momentjs https://github.com/moment/moment/在 Git 存储库上创建问题是处理此错误的最佳方法。