Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证字符串日期,格式为MMDDYY_C#_Regex - Fatal编程技术网

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

C# 验证字符串日期,格式为MMDDYY,c#,regex,C#,Regex,我必须使用regex验证日期(MMDDYY),我的输入是字符串(对于ex“112517”),没有任何“/” 我已经尝试过了(我已经从正则表达式中删除了“/”,因为我的输入是ex“112517”的字符串) 这不适用于二月或闰年(022920) 有人能在这方面指导我吗 编辑 恕我直言,我知道我们可以通过代码来实现 try { string str = "112192"; DateTime date = DateTime.ParseExa

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

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

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

有人能在这方面指导我吗

编辑

恕我直言,我知道我们可以通过代码来实现

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

但是我的要求是regex,这样我就可以在配置中传递这个regex。

我完全赞同这样的评论,即regex不是实现这一点的方法,而DateTime解析会更好。但是,OP明确指出,他们需要将其作为正则表达式配置值来执行。所以这里是

您需要将其分为多个组,允许其中任何一个组作为备选方案:

  • 以31天作为备选日期的所有月份数字,然后是日期数字最多为31的模式,然后是任意两位数的年份
  • 所有具有30天的可选月数,然后是一个日数最多为30的模式,然后是任意两位数的年份
  • 只剩下二月了。下一个模式是非闰年2月。月份是02天,最多28天,您可以指定这适用于哪一年(您只有2位数字表示年份,因此这取决于您的2位数年份的上限/下限)
  • 最后是闰年2月。月份是02天,最多29天,您可以指定这适用于哪一年(您只有2位数字表示年份,因此这取决于您的上限/下限)
  • 我不在我的电脑前,但这些组看起来是这样的:

  • (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
  • 02(0[1-9]| 1\d | 2[0-8]),然后选择2个非闰年数字
  • 02(0[1-9]| 1\d | 2[0-9]),然后选择两位数闰年

  • 然后,您只需将这4个部分组合为备选方案,每端都有锚定(以避免与“hello021418world”匹配),如下所示:“^((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]| 1\d | 2\d | 3[0-1])\d |(04 | 06 | 09 | 11)(0[1-9]| 1\d | 2\d | d | d | d | d |组)d |为什么需要使用?”?让DateTime结构尝试读取提供适当格式掩码的字符串要简单得多。Regex不知道什么是闰年,一个月有多少天。DateTime更了解它。因此,即使是闰年,也没有2月30日的日期。ParseExact(“112517”,“MMddyy”,null,0)(1)使用一个正则表达式解码站点来理解和简化当前的正则表达式。(2) 决定你到底想要什么。(3) 扩展正则表达式以包含所需的额外位。(4) 试着自己做这项工作,不要让别人帮你写代码。感谢ans,这很有帮助。
    try
            {
                string str = "112192";
                DateTime date = DateTime.ParseExact(str , "MMddyy", CultureInfo.InvariantCulture);
                MessageBox.Show("Correct Date format");
            }
            catch
            {
                MessageBox.Show("Wrong Date format");                
            }