我想要一个正则表达式,它将验证日期是否采用以下格式之一:
到目前为止我已经
了^([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2]\d{3}((\s([0-1]\d|[2][0-3])\:[0-5]\d\((:[0-5]\d)?)?)$
我一直在尝试an online regex tester。当我尝试21/05/2014
但不是21/05/2014 15:54
或21/05/2014 15:54:12
这可能是一个错位?错误,但凭借我有限的正则表达技能,它对我来说是正确的。
请注意,我并不希望对闰年和月内的事情过于挑剔。 [01-31] / [01-12] / [1000-2999]适用于日期部分。
答案 0 :(得分:2)
在你的表达式中,你试图匹配一个文字的左括号:
((\s([0-1]\d|[2][0-3])\:[0-5]\d\((:[0-5]\d)?)?)
^^
如果你删除它,你应该是好的。但是,我清理了一些这些比赛组...所以1是天,2是月,3是年,4是小时,5是分钟,6是秒:
^([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/([1-2]\d{3})(?:(?:\s([0-1]\d|[2][0-3])\:([0-5]\d)(?::([0-5]\d))?)?)$
但是,如果表达式很复杂,可能需要使用x
修饰符并添加空格&评论(?# ... )
。
最后,我可以建议much simpler之类的内容:
^\d{2}\/\d{2}\/\d{4}\s*(?:\d{2}:\d{2}(?::\d{2})?)?$
这更容易阅读/修改/调试,并且仍然匹配同一组数字。您可以使用您的语言(PHP,Java,Javascript,Python等)库来尝试来创建DateTime类。如果失败,那么您知道它的日期无效。这也将更加准确,因为您的表达式仍将匹配30/02/2014
,而不是一天。