C# 使用正则表达式验证输入

C# 使用正则表达式验证输入,c#,regex,C#,Regex,我需要验证应用程序的输入。输入是一个格式化字符串,可能包含部分日期,例如: {0:yy}{0:MM}{0:dd}_{0:hh}{0:mm}{0:ss}-SOME OTHER TEXT sometext{0:yyyy}{0:MM}{0:dd}mORETEXT 输入不必包含日期的这些部分,但如果包含,我需要它们是有效的格式项,可以由String.format()方法使用。我相信我应该使用正则表达式进行验证,但我并不擅长 您能帮忙吗?考虑到我们通过评论进行的反复讨论,我认为您需要的是:

我需要验证应用程序的输入。输入是一个格式化字符串,可能包含部分日期,例如:

{0:yy}{0:MM}{0:dd}_{0:hh}{0:mm}{0:ss}-SOME OTHER TEXT
sometext{0:yyyy}{0:MM}{0:dd}mORETEXT
输入不必包含日期的这些部分,但如果包含,我需要它们是有效的格式项,可以由
String.format()
方法使用。我相信我应该使用
正则表达式进行验证,但我并不擅长


您能帮忙吗?

考虑到我们通过评论进行的反复讨论,我认为您需要的是:

        Regex curlyThings = new Regex(@"\{0:.*?\}");
        Regex kosherCurlyThings = new Regex(@"\{0:(yy|yyyy|MM|dd|hh|mm|ss)\}");

        MatchCollection matchCollection = curlyThings.Matches("CG{0:yyyy}-{0:MM}-{0:dd}asdf{0:GARBAGE}.csv");
        foreach(Match match in matchCollection)
        {
            if(!kosherCurlyThings.IsMatch(match.Value))
            {
                Console.WriteLine("{0} isn't kosher!", match.Value);
            }                
        }

所以你想从任意字符串中解析日期?或者你在做断言验证?我不确定断言验证是什么。我将这些字符串存储在数据库中,并在我的C#代码中使用它们,如下所示:FileName=String.Format(dr[“FileNameTemplate”].ToString(),DateTime.UtcNow),因此我不希望用户输入无效的格式项,如“SomeText{garbage}moreText{morebrage}theend”,听起来像是解析。我所说的“断言验证”是指踩刹车并告诉用户“不,那无效-修复它”。因此,如果字符串包含单个大括号,则必须有一个右大括号,并且在它们之间必须有“0:”加上日期时间的有效部分。我的意思是作为C#的String.format()方法中的格式项使用有效。您可能希望转义
{
}
字符,因为它们是正则表达式中的特殊字符。@jonnyGold Hmmm。。。出了点问题。我试图用以下代码来测试这一点:var r=newregex(@“*?”(\{0:yy(yy)?\}{0:MM\}{0:dd\}(\{0:hh\}{0:MM\}{0:ss\}))?*);如果(!r.IsMatch(“CG{0:yyyygarbagey}-{0:MM}-{0:dd}.csv”){var blah=“格式无效!”;}但发现我的坏字符串有效。。。我做错什么了吗?我只是想到了一个更好的答案,应该是可行的。。。看一看。