6

我希望用户输入他的出生日期。我希望它采用 YYYY-MM-DD 格式。Node-Validator 现在验证所有日期格式,而不是特定格式。所以如果我输入 12324433 ,它也会被验证,因为它认为它的纪元时间。

请帮我看看我该怎么办?这个问题特定于 Mongoose 中的验证

4

4 回答 4

15

我是 def 的忠实粉丝express-form,值得一看——你也可以使用moment.js. 出于这个原因,我自己使用了它

来自 moment.js 文档:

moment("2011-10-10", "YYYY-MM-DD").isValid(); // true
moment("2011-10-50", "YYYY-MM-DD").isValid(); // false (bad day of month)

干杯,我希望这会有所帮助:)

ps - moment.js github url以防万一。

于 2013-07-02T19:04:12.383 回答
3

正如 Node-Validator 的文档所指出的,“regex 可能是更好的选择”。我创建了一个看起来不错的正则表达式,我相信它会完成工作,但如果你打算使用它,我建议你彻底测试它。

/\d\d\d\d-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])/

此正则表达式将验证您需要的 YYYY-MM-DD 格式的日期。你可以在这里看到一个使用它的工作代码片段:http: //tinker.io/c269b/

祝你好运!

编辑: 我注意到有什么东西破坏了它。此正则表达式验证部分匹配,因此“1970-01-011”之类的输入检查为有效。发生这种情况是因为我忘记在正则表达式中添加开始结束标记。这是我修复后的样子:

/^\d\d\d\d-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])$/

Tinker 上的示例也使用此修复程序进行了更新。

于 2013-07-02T19:31:08.637 回答
1

因为我也在研究这个并且也在检查 express 验证器,所以我模拟了一个正则表达式,它可能会帮助你验证日期。

((19|2\d)\d\d)-((0?[1-9])|(1[0-2]))-((0?[1-9])|([12]\d)|(3[01]))

这是解释它的图像:

在此处输入图像描述

于 2018-06-30T01:20:43.290 回答
0
//let pdateFormat = "YYYYMMDDHHmmss";
//let pdateStr = "20210228005959";

let pdateFormat = 'YYYYMMDDHH:mm';
let pdateStr = '2021022823:59';

validateDateFormat (pdateFormat, pdateStr);

function validateDateFormat(dateFormat, dateStr) {
  if (dateFormat.length != dateStr.length) {
    return false;
  }

  let dateIdentifierArr = {
    year: 'YYYY',
    month: 'MM',
    date: 'DD',
    hour: 'HH',
    minute: 'mm',
    second: 'ss',
  };

  let dateConstructVar = {};
  for (var key in dateIdentifierArr) {
    if (dateFormat.indexOf(dateIdentifierArr[key]) != -1) {
      let index = dateFormat.indexOf(dateIdentifierArr[key]);
      dateConstructVar[key] = dateStr.substring(
        index,
        index + dateIdentifierArr[key].length
      );
    } else {
      dateConstructVar[key] = '00';
    }
  }

  let newDate = new Date(
    +dateConstructVar['year'],
    dateConstructVar['month'] - 1,
    +dateConstructVar['date'],
    dateConstructVar['hour'],
    dateConstructVar['minute'],
    dateConstructVar['second']
  );
  if (
    dateConstructVar['year'] != newDate.getFullYear() ||
    dateConstructVar['month'] != ('0' + (newDate.getMonth() + 1)).slice(-2) ||
    dateConstructVar['date'] != ('0' + newDate.getDate()).slice(-2) ||
    dateConstructVar['hour'] != ('0' + newDate.getHours()).slice(-2) ||
    dateConstructVar['minute'] != ('0' + newDate.getMinutes()).slice(-2) ||
    dateConstructVar['second'] != ('0' + newDate.getSeconds()).slice(-2)
  ) {
    console.log('Invalid Date');
  }

  console.log(newDate);
}
于 2021-11-11T05:28:02.473 回答