我写了一个正则表达式来确定日期时间。(假设每个月都有31
天,而且这一年只包含1900
到2099
)
^(((((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
已被识别。我想知道是否有任何方法可以修改正则表达式来防止它。
答案 0 :(得分:1)
在最后删除/
后,您的RegEx正在为我工作。这是一个简单的Sublime Text RegEx查找/替换:
以下是调整后的正则表达式:
^(((((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之间的任何日期是正确的