RegEx匹配M / YYYY,MM / YYYY,M / YY或MM / YY格式

需要帮助查找或使RegEx与MM / YY或MM / YYYY格式匹配。 我的RegExFu很弱,我甚至不确定从哪里开始写这个。

月份应为1-12岁,2009年以后的任何内容都应该有效。 很抱歉之前没有提及更多细节。 这用作到期日期。

我会为超出的人添加赏金,并validation> =今天的MM / YY或MM / YYYY格式。 让过期的东西超过第一个validation层是没有意义的。


我感觉很糟糕,因为我改变了我的要求,并且必须更具体地说明我需要的问题,所以我会奖励所有那些在无价值窗口到期后回答的人。

关于什么

 ^(1[0-2]|0[1-9]|\d)\/(20\d{2}|19\d{2}|0(?!0)\d|[1-9]\d)$ 

匹配数月

 // 10 to 12 | 01 to 09 | 1 to 9 (1[0-2]|0[1-9]|\d) 

多年

 // 2000 to 2099 | 1900 to 1999 // 01 to 09 | 10 to 99 (20\d{2}|19\d{2}|0(?!0)\d|[1-9]\d) 

匹配任何>= 2010

 /^(1[0-2]|0[1-9]|\d)\/([2-9]\d[1-9]\d|[1-9]\d)$/; 

结果:

 12/2009 : false 1/2010 : true 12/2011 : true 12/9011 : true 12/07 : false 12/17 : true 

尝试:

 var re = new Regex(@"(?\d{2})/(?\d{2}|\d{4})"); var month = re.Match(yourString).Groups["month"]; ... 

另一种选择是:

 if(dateStr.Length == 5) myDateTime = DateTime.ParseExact("MM/YY", dateStr); else myDateTime = DateTime.ParseExact("MM/YYYY", dateStr); 

试试这个:

 ^(0[1-9]|1[0-2])/(19|2[0-1])\d{2}$ 

约束到实际月份(1-12)和1900-2199年。

@BrunoLM ,

 ^(1[0-2]|0[1-9]|\d)\/(20\d{2}|19\d{2}|0(?!0)\d|[1-9]\d)$ 

匹配“0/2009”。 我可以建议一个小改进:

 ^(1[0-2]|0[1-9]|[1-9])\/(20\d{2}|19\d{2}|0(?!0)\d|[1-9]\d)$