Nodejs中的日期验证

时间:2013-07-02 18:49:16

标签: javascript node.js validation date mongoose

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

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

3 个答案:

答案 0 :(得分:12)

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

来自moment.js docs:

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以防万一。

答案 1 :(得分:2)

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

/\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”这样的输入检出有效。发生这种情况是因为我忘了在正则表达式中添加 start end 标记。这就是我修复它的方式:

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

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

答案 2 :(得分:0)

由于我也在研究此问题,并且也在检查快速验证器,因此我也模拟了一个正则表达式,可能会帮助您验证日期。

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

以下是解释它的图像:

enter image description here