正则表达式的日期时间

时间:2014-02-13 15:56:46

标签: regex

我写了一个正则表达式来确定日期时间。(假设每个月都有31天,而且这一年只包含19002099

^(((((0?[1-9]|1[012])[- /.\\](0?[1-9]|[12][0-9]|3[01]))|((0?[1-9]|(1|2)[0-9]|3[01])[- /.\\](0?[1-9]|[1][012])))([- /.\\](19|20)\d{2})))$

日期时间的格式为:

dd-mm-yyyy
mm-dd-yyyy
0m-0d-yyyy
0d-0m-yyyy
m-d-yyyy
d-m-yyyy
除了一件事,一切都很好;如果日期时间如32-10-2010,在我的想法中不应该被识别,但在正则表达式中,2-10-2010已被识别。我想知道是否有任何方法可以修改正则表达式来防止它。

4 个答案:

答案 0 :(得分:1)

在最后删除/后,您的RegEx正在为我工​​作。这是一个简单的Sublime Text RegEx查找/替换:

enter image description here

以下是调整后的正则表达式:

^(((((0?[1-9]|1[012])[- /.\\](0?[1-9]|[12][0-9]|3[01]))|((0?[1-9]|(1|2)[0-9]|3[01])[- /.\\](0?[1-9]|[1][012])))([- /.\\](19|20)\d{2})))$

但更好的解决方案将使用语言本机日期功能。我想不出一种没有内置方法的语言。

例如,使用JavaScript的Date对象,或其他一些......

答案 1 :(得分:0)

您的案例中的有效日期格式模式为:

/^\d{1,2}-\d{1,2}-\d{4}$/

使用RegEx,您只能验证日期的格式,而不是正确的日期,因为这是一种不好的做法!几个月可以是不同的日子,所以写好会考虑它的模式好运。

如果您要验证日期是否正确,请使用您所用语言的其他内置函数。例如,PHP等的checkdate

答案 2 :(得分:0)

试试这个:

^((3[01]|0?[1-9]|[1-2][0-9])-(1[012]|0?[1-9])|((1[012]|0?[1-9])-(3[01]|0?[1-9]|[1-2][0-9])))-(19|20)[0-9][0-9]$

答案 3 :(得分:0)

我已经给出了这样的答案here

此匹配无效日期:29-02-1900但对于01-01-1900和31-12-2099之间的任何日期是正确的