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

时间:2010-10-15 17:04:16

标签: c# regex

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

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

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


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

4 个答案:

答案 0 :(得分:12)

怎么样?
^(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

答案 1 :(得分:5)

试试这个:

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

对实际月份(1-12)和1900-2199年的限制。

答案 2 :(得分:5)

尝试:

var re = new Regex(@"(?<month>\d{2})/(?<year>\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);

答案 3 :(得分:0)

@BrunoLM

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

匹配&#34; 0/2009&#34;。我可以建议一个小改进:

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