1

我有一个日期字段,我想确保它的格式有效,如果是,用户是否已满 18 岁。格式为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如果我传递格式错误的日期,则会产生错误。

如何在调用后断开链,.isRFC3339()以便如果日期无效,自定义验证器将不会运行?我在文档中找不到任何内容

4

1 回答 1

1

您可以将 momentjs严格模式与使用(或)特殊格式的String + Format解析一起使用。moment.ISO_8601moment.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!');
    }
  }),
于 2018-08-29T22:33:54.207 回答