Regular Expressions 匹配日期
示例
您应该记住,正则表达式是为匹配日期(或不匹配)而设计的。说一个日期是有效的,这是一个复杂得多的工作,因为它将需要大量的异常处理(请参阅leap年条件)。
让我们首先将月份(1-12)与可选的前导0相匹配:
0?[1-9]|1[0-2]
要匹配日期,还可以选择带前导0:
0?[1-9]|[12][0-9]|3[01]
并匹配年份(假设范围1900-2999):
(?:19|20)[0-9]{2}
分隔符可以是空格,破折号,斜杠,空白等。可以随意添加任何您感觉可以用作分隔符的内容:
[-\\/ ]?
现在,您将整个事情串联起来并得到:
(0?[1-9]|1[0-2])[-\\/ ]?(0?[1-9]|[12][0-9]|3[01])[-/ ]?(?:19|20)[0-9]{2} //MMDDYYYY (0?[1-9]|[12][0-9]|3[01])[-\\/ ]?(0?[1-9]|1[0-2])[-/ ]?(?:19|20)[0-9]{2} //DDMMYYYY (?:19|20)[0-9]{2}[-\\/ ]?(0?[1-9]|1[0-2])[-/ ]?(0?[1-9]|[12][0-9]|3[01]) //YYYYMMDD
如果您想变得学究一些,可以使用向后引用以确保两个分隔符相同:
(0?[1-9]|1[0-2])([-\\/ ]?)(0?[1-9]|[12][0-9]|3[01])\2(?:19|20)[0-9]{2} //MMDDYYYY ^ refer to [-/ ] (0?[1-9]|[12][0-9]|3[01])([-\\/ ]?)(0?[1-9]|1[0-2])\2(?:19|20)[0-9]{2} //DDMMYYYY (?:19|20)[0-9]{2}([-\\/ ]?)(0?[1-9]|1[0-2])\2(0?[1-9]|[12][0-9]|3[01]) //YYYYMMDD