Moment.js判定非有效日期(含地址)为有效问题咨询
解决Moment.js误判非日期字符串为有效日期的问题
嘿,这个问题我之前也碰到过!根源在于Moment.js默认启用的宽松解析模式——它会尝试从任意字符串里提取符合指定格式的数字片段,哪怕整个内容完全不是日期格式。比如你例子里的"7840 W HICKS STREET",Moment会把开头的"7840"当作年份,直接忽略后面的非数字内容,最后误判为有效日期。
最直接的解决方法:开启严格解析模式
Moment.js支持通过第三个参数开启严格模式,强制要求字符串完全匹配指定的格式(包括分隔符、字符长度、数值范围)。修改你的代码如下:
var wrong_date = "7840 W HICKS STREET"; document.write(moment(wrong_date, "YYYY-MM-DD HH:mm:ss", true).isValid()); // 现在会返回false
额外注意点
- 严格模式下,Moment会做更全面的校验:不仅格式要完全匹配,日期时间的数值也必须在合理范围内(比如月份必须是1-12,日期要对应当月的有效天数)。
- 如果你的场景需要支持多种日期格式,可以传入格式数组,同时开启严格模式:
// 支持两种格式,且都严格匹配 moment(wrong_date, ["YYYY-MM-DD HH:mm:ss", "MM/DD/YYYY"], true).isValid()
内容的提问来源于stack exchange,提问作者Jeff Beagley
相关产品推荐
相关产品推荐

