我有一个日期字段,我想确保是一个有效的格式,如果是这样的用户超过18岁。格式为 YYYY-MM-DD .
YYYY-MM-DD
下面是我的一个验证器-失败的验证器:
body('birthday', 'Date format should be: YYYY-MM-DD') .isRFC3339() .custom(date => { const over18 = moment().diff(date, 'years') >= 18; if(!over18) { return Promise.reject('You must be 18 or over!'); } }),
当前发生的情况是,如果日期不是RFC3339日期,验证链将继续。这是有问题的,因为 moment 如果传递的日期格式不正确,则生成错误。
moment
打电话给你后,我该如何打破锁链 .isRFC3339() 因此,如果日期无效,自定义验证器将不会运行?我在房间里什么也找不到 docs
.isRFC3339()
你可以用momentjs strict mode 一起 String + Format 使用解析 moment.ISO_8601 (或 moment.HTML5_FMT.DATE ) special formats
moment.ISO_8601
moment.HTML5_FMT.DATE
您的代码可以如下所示:
body('birthday', 'Date format should be: YYYY-MM-DD') // .isRFC3339() // no more needed .custom(date => { const mDate = moment(date, moment.ISO_8601, true); const over18 = moment().diff(mDate, 'years') >= 18; if(!mDate.isValid()) { return Promise.reject('Date is not YYYY-MM-DD'); if(!over18) { return Promise.reject('You must be 18 or over!'); } }),