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)