时间正则式的表示
转至:http://zhidao.baidu.com/question/125006373.html最简单的正则 如 : \d{4}-\d{2}-\d{2}但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。先考虑与年份无关的前三条规则,年份可统一写作(?!0000){4}下面仅考虑月和日的正则1. 包括平年在内的所有年份的月份都包含1-28日(0|1)-(0|1|2)2. 包括平年在内的所有年份除2月外都包含29和30日(0|1)-(29|30)3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日(0|1)-31)合起来就是除闰年的2月29日外的其它所有日期(?!0000){4}-((0|1)-(0|1|2)|(0|1)-(29|30)|(0|1)-31)接下来考虑闰年的实现1 : 四年一闰({2}(0||)2 : 百年不闰,四百年再闰(0||)003 : 合起来就是所有闰年的2月29日({2}(0||)|(0||)00)-02-29)四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则^((?!0000){4}-((0|1)-(0|1|2)|(0|1)-(29|30)|(0|1)-31)|({2}(0||)|(0||)00)-02-29)$考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。^(?:(?!0000){4}-(?:(?:0|1)-(?:0|1|2)|(?:0|1)-(?:29|30)|(?:0|1)-31)|(?:{2}(?:0||)|(?:0||)00)-02-29)$
页:
[1]