2015-07-13 31 views
1

我目前正在尝试构建匹配/验证XSDDateTime字符串的正则表达式。我在网上发现了几个,但他们没有一个在2月31日进行体面检查,等等 - 我也希望它能检查闰年。XSDDateTime正RegEx

我得到了什么至今

[1-9][0-9]{3}\-(0[1-9]|1[1-2])\-(0[1-9]|1[1-9]|2[])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(Z|\+|\-(0[1-9]|1[1-2]):(0[1-9]|1[1-2])) 

但这不会引发错误为2月31日...

是否有一个合适的正则表达式我只是没有找到尚未?因为从头开始构建一个非常混乱。任何帮助将不胜感激。

+0

是否必须是正则表达式?你用这种语言做什么? – tomsv

+0

我现在在做PHP - 但这应该是相当语言独立我猜 – Xenonite

+1

你不应该用正则表达式,而与一些斗争,你可以添加二月份的规格和什么不是,但你可以'因为正则表达式和数学不能很好地结合在一起,更不用说你还必须包含2000年(这不是闰年)等等。 –

回答

1

与正则表达式的日期时间验证是不安全的。这就是为什么几乎每种计算语言都有自己的DateTime类,并提供其解析方法。

对于PHP,你可以提取寻找有效的,日期时间与this regex

-?\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|\+\d{2}:\d{2}|\b) 

然后用date_parse

print_r(date_parse("2001-10-26T21:32:52")); 

IDEONE demo

+0

我知道实际的验证应该用“真正的”编程语言来完成。只是想要一个命令检查大多数东西。 – Xenonite

+0

有更好的方法来利用正则表达式比验证日期时间值。有一条规则:如果没有正则表达式更容易且更易维护,请不要使用正则表达式。如果你的日期时间格式改变,这将是一个很长的无意义的字符串难以调整。 –