C# 日期、时间验证的正则表达式

yyyy/MM/dd格式
^(?<year>\\d{2,4})/(?<month>\\d{1,2})/(?<day>\\d{1,2})$

yyyy-MM-dd格式
^(?<year>\\d{2,4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})$

yyyy.MM.dd 格式
^(?<year>\\d{2,4})[.](?<month>\\d{1,2})[.](?<day>\\d{1,2})$

yyyy年MM月dd日格式 (可以不包含年和日)
^((?<year>\\d{2,4})年)?(?<month>\\d{1,2})月((?<day>\\d{1,2})日)?$

yyyy年MM月dd日格式(MM、dd为中文数字)
^((?<year>\\d{2,4})年)?(正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}日)?$

yyyy年MM月dd日格式(年月日均为中文数字)
^(零|〇|一|二|三|四|五|六|七|八|九|十){2,4}年((正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}(日)?)?)?$

农历日期(年月日,可不包含日,匹配不含“初X”的日期)

^(甲|乙|丙|丁|戊|己|庚|辛|壬|癸)(子|丑|寅|卯|辰|巳|午|未|申|酉|戌|亥)年((正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}(日)?)?)?$

农历日期(年月日,可不包含年,匹配“初X”类的日期)

^((甲|乙|丙|丁|戊|己|庚|辛|壬|癸)(子|丑|寅|卯|辰|巳|午|未|申|酉|戌|亥)年)?(正|一|二|三|四|五|六|七|八|九|十|十一|十二)月初(一|二|三|四|五|六|七|八|九|十)$


XX时XX分XX秒格式(可不含秒)
^(?<hour>\\d{1,2})(时|点)(?<minute>\\d{1,2})分((?<second>\\d{1,2})秒)?$

XX时XX分XX秒格式(中文数字,可不含秒)
^((零|一|二|三|四|五|六|七|八|九|十){1,3})(时|点)((零|一|二|三|四|五|六|七|八|九|十){1,3})分(((零|一|二|三|四|五|六|七|八|九|十){1,3})秒)?$

XX分XX秒格式(中文数字)
^((零|一|二|三|四|五|六|七|八|九|十){1,3})分((零|一|二|三|四|五|六|七|八|九|十){1,3})秒$

XX时格式
\\b(?<hour>\\d{1,2})(时|点钟)\\b

/// <summary>
/// 使用正则表达式判断是否为日期
/// </summary>
/// <param name="str" type=string></param>
/// <returns name="isDateTime" type=bool></returns>
public bool IsDateTime(string str)
{
    bool isDateTime = false;
    // yyyy/MM/dd
    if (Regex.IsMatch(str, "^(?<year>\\d{2,4})/(?<month>\\d{1,2})/(?<day>\\d{1,2})$"))
        isDateTime = true;
    // yyyy-MM-dd 
    else if (Regex.IsMatch(str, "^(?<year>\\d{2,4})-(?<month>\\d{1,2})-(?<day>\\d{1,2})$"))
        isDateTime = true;
    // yyyy.MM.dd 
    else if (Regex.IsMatch(str, "^(?<year>\\d{2,4})[.](?<month>\\d{1,2})[.](?<day>\\d{1,2})$"))
        isDateTime = true;
    // yyyy年MM月dd日
    else if (Regex.IsMatch(str, "^((?<year>\\d{2,4})年)?(?<month>\\d{1,2})月((?<day>\\d{1,2})日)?$"))
        isDateTime = true;
    // yyyy年MM月dd日
    else if (Regex.IsMatch(str, "^((?<year>\\d{2,4})年)?(正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}日)?$"))
        isDateTime = true;

    // yyyy年MM月dd日
    else if (Regex.IsMatch(str, "^(零|〇|一|二|三|四|五|六|七|八|九|十){2,4}年((正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}(日)?)?)?$"))
        isDateTime = true;
    // yyyy年
    //else if (Regex.IsMatch(str, "^(?<year>\\d{2,4})年$"))
    //    isDateTime = true;

    // 农历1
    else if (Regex.IsMatch(str, "^(甲|乙|丙|丁|戊|己|庚|辛|壬|癸)(子|丑|寅|卯|辰|巳|午|未|申|酉|戌|亥)年((正|一|二|三|四|五|六|七|八|九|十|十一|十二)月((一|二|三|四|五|六|七|八|九|十){1,3}(日)?)?)?$"))
        isDateTime = true;
    // 农历2
    else if (Regex.IsMatch(str, "^((甲|乙|丙|丁|戊|己|庚|辛|壬|癸)(子|丑|寅|卯|辰|巳|午|未|申|酉|戌|亥)年)?(正|一|二|三|四|五|六|七|八|九|十|十一|十二)月初(一|二|三|四|五|六|七|八|九|十)$"))
        isDateTime = true;

    // XX时XX分XX秒
    else if (Regex.IsMatch(str, "^(?<hour>\\d{1,2})(时|点)(?<minute>\\d{1,2})分((?<second>\\d{1,2})秒)?$"))
        isDateTime = true;
    // XX时XX分XX秒
    else if (Regex.IsMatch(str, "^((零|一|二|三|四|五|六|七|八|九|十){1,3})(时|点)((零|一|二|三|四|五|六|七|八|九|十){1,3})分(((零|一|二|三|四|五|六|七|八|九|十){1,3})秒)?$"))
        isDateTime = true;
    // XX分XX秒
    else if (Regex.IsMatch(str, "^(?<minute>\\d{1,2})分(?<second>\\d{1,2})秒$"))
        isDateTime = true;
    // XX分XX秒
    else if (Regex.IsMatch(str, "^((零|一|二|三|四|五|六|七|八|九|十){1,3})分((零|一|二|三|四|五|六|七|八|九|十){1,3})秒$"))
        isDateTime = true;

    // XX时
    else if (Regex.IsMatch(str, "\\b(?<hour>\\d{1,2})(时|点钟)\\b"))
        isDateTime = true;
    else
        isDateTime = false;

    return isDateTime;
}

 

posted @ 2023-09-07 20:54  船长华莱士  阅读(506)  评论(0编辑  收藏  举报