日期格式的正则表达式

时间:2018-07-12 13:00:11

标签: c# asp.net regex date

我需要可在以下格式下查找/匹配的正则表达式

2018年7月1日,2018年7月2日,2018年3月4日 (使用,也可以不使用逗号,dd / mm / yyyy和mm / dd / yyyy) 我在正则表达式下面有一个很好的here

正则表达式为

(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*?\s+\d{1,2}(?:[a-z]{2})?(?:\s+|,\s*)\d{4}\b

但是它不能与我的代码一起使用,我不知道自己在错什么地方...

我的代码是

Regex regex = new Regex(@"(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*?\s+\d{1,2}(?:[a-z]2})?(?:\s+|,\s*)\d{4}\b");
Match match = regex.Match(html);
return match.Value;

上面的表达式也负责

2020年1月1日,但我还需要 2020年1月1日 ..

1 个答案:

答案 0 :(得分:1)

这是C#函数,它对您提到的所有格式都匹配并返回结果是或否,您也可以在formats数组中添加更多日期格式

    public bool checkIsValidDateTime(string date)
        {
            var formats = new[] { "dd MMMM yyyy", "MMMM dd yyyy", "dd MMMM ,yyyy", "MMMM dd, yyyy", "d MMMM yyyy", "MMMM d yyyy", "d MMMM ,yyyy", "MMMM d, yyyy" };

            DateTime dt;
        
            var replacements = new[]{
             new{Find="st",Replace=""},
             new{Find="nd",Replace=""},
             new{Find="rd",Replace=""},
             new{Find="th",Replace=""}
              };


            foreach (var set in replacements)
            {
                date = date.Replace(set.Find, set.Replace);
              
            }

            bool isValid = DateTime.TryParseExact(date, formats, null, DateTimeStyles.None, out dt);

            return isValid;
        }
        
        // which return true for following formats
        
            string input = "1st July 2018";
            string input2 = "July 2nd 2018";
            string input3 = "3rd March ,2018";
            string input4 = "January 4th, 2020";
            string input5 = "20th January 2020";


     bool isvalid1 = checkIsValidDateTime(input); // result true
     bool isvalid2 = checkIsValidDateTime(input2); // result true
     bool isvalid3 = checkIsValidDateTime(input3); // result true
     bool isvalid4 = checkIsValidDateTime(input4); // result true
     bool isvalid5 = checkIsValidDateTime(input5); // result true