JS日期字符串校验异常:误将非日期字符串判定为有效日期
问题原因及解决方案
问题根源
JavaScript原生的Date构造函数解析规则过于宽松,它会尝试从字符串中提取任意可识别的数字片段作为日期组件。比如输入DEV-50003时,它会忽略非数字前缀,把50003识别为年份,生成一个对应年份的合法日期对象,因此toString()不会返回'Invalid Date',导致误判。
正确的校验方式
既然你已经在使用moment.js,应该利用moment自带的严格校验能力,规避原生Date的宽松解析问题:
const parsedDate = moment(str, 'DD/MM/YYYY', true); if (parsedDate.isValid()) { return parsedDate.local().format('DD/MM/YYYY'); }
- 第三个参数
true开启严格匹配模式,要求输入字符串必须完全符合指定的'DD/MM/YYYY'格式才会被判定为有效日期 - 这种方式能精准过滤掉
DEV-50003这类非日期格式的字符串
内容的提问来源于stack exchange,提问作者Ruhith Udakara
相关产品推荐
相关产品推荐

