代码之家  ›  专栏  ›  技术社区  ›  John Farrell

regex匹配m/yy yy、m m/yy yy、m/yy或m m/yy格式

  •  9
  • John Farrell  · 技术社区  · 14 年前

    需要帮助查找或使regex与mm/yy或mm/yyyy格式匹配。我的regexfu很弱,我甚至不知道从哪里开始写这篇文章。

    月份应该是1-12年,而2009年之后的任何时间都是有效的。很抱歉之前没有提到更多细节。这被用作到期日。

    我将为超过或超过的人添加奖励,并验证mm/yy或mm/yyyy格式,即>=今天的日期。让过期的东西通过第一个验证层是没有意义的。


    我很难过,因为我改变了我的要求,必须更具体的在我需要中间的问题,所以我将奖励所有那些回答一旦没有奖金窗口到期。

    4 回复  |  直到 7 年前
        1
  •  12
  •   BrunoLM    14 年前

    怎么样

    ^(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
    
        2
  •  5
  •   Klaus Byskov Pedersen    14 年前

    尝试:

    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
  •  5
  •   ChrisWue Nikesh K    12 年前

    试试这个:

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

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

        4
  •  0
  •   Petter Friberg Onceler    7 年前

    @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)$