我希望用户输入他的出生日期。我希望它采用 YYYY-MM-DD 格式。Node-Validator 现在验证所有日期格式,而不是特定格式。所以如果我输入 12324433 ,它也会被验证,因为它认为它的纪元时间。
请帮我看看我该怎么办?这个问题特定于 Mongoose 中的验证
我希望用户输入他的出生日期。我希望它采用 YYYY-MM-DD 格式。Node-Validator 现在验证所有日期格式,而不是特定格式。所以如果我输入 12324433 ,它也会被验证,因为它认为它的纪元时间。
请帮我看看我该怎么办?这个问题特定于 Mongoose 中的验证
我是 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以防万一。
正如 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 上的示例也使用此修复程序进行了更新。
//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);
}