/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/
接受以下格式:
Year:
YYYY (eg 1997)
Year and month:
YYYY-MM (eg 1997-07)
Complete date:
YYYY-MM-DD (eg 1997-07-16)
Complete date plus hours and minutes:
YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
Complete date plus hours, minutes and seconds:
YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
Complete date plus hours, minutes, seconds and a decimal fraction of a
second
YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
2005-04-05
永远不会匹配,我不能为我的生活弄清楚。根据模式,它应该匹配。
答案 0 :(得分:2)
考虑使用OR类型方法进行构建,然后根据需要简化后面的内容:
(\d{4})|(\d{4}-\d{2})|(\d{4}-\d{2}-\d{2})|(\d{4}-\d{2}-\d{2}T\d{2}(:\d{2}){1,2}[-+]\d{2}:\d{2})
此外,这不是检查日期的有效数字,如果你模块化它可以很容易地完成它一步一步。日期的示例可能如下所示:
\d{4}-(([0]{0,1}[\d])|(1[0-2]))-(([0-2]{0,1}[\d])|(3[01]))
请注意,这只假设4位数年份,并且任何4位数年份都可以。它还允许01和1作为单个数字月和日数。还有一些额外的包围以保持清晰。