我正在编写c#自定义声纳法则。我试图匹配代码中的字符串文字,就像“ dd / mm / yyyy”一样。 我的意思是,每当开发人员使用dd / mm / yyyy或mm / dd / yyyy或yyyy / mm / dd时,它都应该捕获。 我需要在C#中为此使用正则表达式以匹配“ dd / mm / yyyy或mm / dd / yyyy或yyyy / mm / dd”
答案 0 :(得分:1)
正如我在评论中所写,您面临的问题要大得多-允许的格式发生冲突-如果一天低于13,则无法区分Set<Artwork> artworkSet = null;
foreach (var exhib in ArtGallery.Exhibits)
foreach (var art in exhib.Artworks)
artworkSet.Add(art);
和dd/mm/yyyy
。< / p>
此外,使用mm/dd/yyyy
可以轻松实现验证日期格式,因此确实不需要为此编写大型,难以阅读且难以维护的正则表达式。
查看我编写的这个演示程序(click to run)来说明我的意思:
DateTime.TryParseExact
结果:
public class Program
{
public static void Main(string[] args)
{
string[] dates = {
// Valid dates
"01/02/2018", // January 2nd (mm/dd/yyyy)
"04/01/2018", // January 4th (dd/mm/yyyy)
"20/01/2018", // January 20th (dd/mm/yyyy)
"01/21/2018", // January 21st (mm/dd/yyyy)
"2018/01/14", // January 14th (yyyy/mm/dd)
// Invalid dates
"23/13/2018",
"not a date",
"2018/22/01",
"1/1/18"
};
string[] formats = {"dd/MM/yyyy", "MM/dd/yyyy", "yyyy/MM/dd"};
for(var i = 0; i < dates.Length; i++)
{
DateTime dateTime;
if(DateTime.TryParseExact(dates[i], formats, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dateTime))
{
Console.WriteLine(dates[i] + " is a valid date: "+ dateTime.ToString("yyyy-MM-dd") );
}
else
{
Console.WriteLine(dates[i] + " is invalid.");
}
}
}
}
因此,写完所有这些之后-正确的解决方案是尽可能避免使用datetime的字符串表示形式,并且如果您确实必须允许这样做,则需要确保只允许使用定义明确的格式集,而不会互相冲突其他-01/02/2018 is a valid date: 2018-02-01
04/01/2018 is a valid date: 2018-01-04 // Note: Wrong date! should be January 4th!
20/01/2018 is a valid date: 2018-01-20
01/21/2018 is a valid date: 2018-01-21
2018/01/14 is a valid date: 2018-01-14
23/13/2018 is invalid.
not a date is invalid.
2018/22/01 is invalid.
1/1/18 is invalid.
和dd/mm/yyyy
很好,如果要添加其他选项,则可以选择其他定界符来帮助您正确区分值-yyyy/mm/dd
和dd/mm/yyyy
可以使用例如,在一起很开心。
答案 1 :(得分:0)