验证字符串日期,格式为MMDDYY

时间:2018-04-02 15:09:25

标签: c# regex

我必须使用正则表达式验证日期(MMDDYY),我的输入是字符串(对于ex“112517”)没有任何“/”。

我试过这个(我从正则表达式中删除了“/”,因为我的输入是ex“112517”的字符串)

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

这不适用于2月或闰年(022920)

有人可以指导我。

修改

得到应有的尊重,我知道我们可以通过代码

来实现
try
        {
            string str = "112192";
            DateTime date = DateTime.ParseExact(str , "MMddyy", CultureInfo.InvariantCulture);
            MessageBox.Show("Correct Date format");
        }
        catch
        {
            MessageBox.Show("Wrong Date format");                
        }

但我的要求是正则表达式,因此我可以在配置中传递此正则表达式。

1 个答案:

答案 0 :(得分:0)

我完全赞同Regex不是这样做的评论,并且DateTime Parse会更好。但是,OP明确表示他们需要将其作为Regex配置值。所以这里......

您需要将其分组,允许任何这些组作为替代方案:

  1. 所有包含31天替代日期的月份数字,其次是您的日期数字格式,最多31个,然后是任意2位数年份。
  2. 所有替代月份数字,包含30天,然后是最多30天的数字模式,随后是任意2位数年份。
  3. 只留下二月。下一个模式是非闰年Februarys。月份是02天到28天,您可以指定适用的年份(年份只有2位数,因此这取决于您的2位数年份的上/下边界)。
  4. 最后闰年Februarys。月份为02,天数为29,您可以指定适用的年份(年份只有2位数,因此这取决于您拥有的上/下边界)。
  5. 我不在我的电脑上,但这些团体看起来像这样:

    1. (01 | 03 | 05 | 07 | 08 | 10 | 12)(0 [1-9] | 1 \ d | 2 \ d | 3 [0-1])\ d \ d
    2. (04 | 06 | 09 | 11)(0 [1-9] | 1 \ d | 2 \ d | 30)\ d \ d
    3. 02(0 [1-9] | 1 \ d | 2 [0-8])然后选择2位非闰年
    4. 02(0 [1-9] | 1 \ d | 2 [0-9])然后选择2位数的闰年
    5. 然后你只需将这4个部分组合起来作为替代,每一端都有锚点(以避免匹配“hello021418world”),如下所示:“^((01 | 03 | 05 | 07 | 08 | 10 | 12)(0 [ 1-9] | 1 \ d | 2 \ d | 3 [0-1])\ d \ d | ...(04 | 06 | 09 | 11)(0 [1-9] | 1 \ d | 2 \ d | 30)\ d \ d | 第3组 | GROUP4 )$”