C#正则表达式匹配字符串“ dd / mm / yyyy或mm / dd / yyyy或yyyy / mm / dd”

时间:2018-09-06 04:27:20

标签: c# .net

我正在编写c#自定义声纳法则。我试图匹配代码中的字符串文字,就像“ dd / mm / yyyy”一样。 我的意思是,每当开发人员使用dd / mm / yyyy或mm / dd / yyyy或yyyy / mm / dd时,它都应该捕获。  我需要在C#中为此使用正则表达式以匹配“ dd / mm / yyyy或mm / dd / yyyy或yyyy / mm / dd”

2 个答案:

答案 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/dddd/mm/yyyy可以使用例如,在一起很开心。

答案 1 :(得分:0)

此正则表达式适用于YYYY / MM / DD和DD / MM / YYYY:

<video autoplay loop controls>
  <source src="{{videoUrl}}" type="video/mp4">
</video>

example check: