首页 > 编程语言 >C# 日期、时间验证的正则表达式

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

时间:2023-09-07 21:00:57浏览次数:40  
标签:Regex isDateTime 验证 C# else 正则表达式 XX str true

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;
}

 

标签:Regex,isDateTime,验证,C#,else,正则表达式,XX,str,true
From: https://www.cnblogs.com/kezhang/p/17686047.html

相关文章

  • C++学习笔记
    练习打印金字塔goto跳转语句for循环for(表达式1;表达式2;表达式3)------外层循环{循环语句块1;for(表达式4;表达式;表达式6)-------内层循环{循环语句块2}//循环语句块1;}表达式1----->赋值语句---->用来初始化----->可......
  • 玉米表型数据,KL,ERN,KT,CC,MRDV,SCMV分别代表什么
    KL:KernelLength(粒子长度)-这通常指的是玉米粒的长度,是玉米品质和产量方面的重要性状之一。ERN:EarNumber(穗数)-这可能表示每株玉米植株上的穗数,也是产量和生长特性的一项重要指标。KT:KernelThickness(粒子厚度)-这可能指的是玉米粒的厚度或宽度,也与品质和产量相关。......
  • AtCoder Beginner Contest 318 - D(状压 dp)
    目录D-GeneralWeightedMaxMatchingD-GeneralWeightedMaxMatching题意给定无向图,边有边权。让你选择一组边,满足任意两边不相交且总边权和最大。顶点数$\le16$思路状压DP求解该问题状态:利用n位二进制表示每个顶点是否已经被选择,0表示该顶点未选,1表示当前......
  • docker启动mysql报错Can't read dir of '/etc/mysql/conf.d/'
    执行命令:dockerrun-p3306:3306--privileged=true-v/mysql/data:/var/lib/mysql-v/mysql/log:/var/log/mysql-v/mysql/conf:/etc/mysql-eMYSQL_ROOT_PASSWORD=1234--name=mysql-server-dmysql:8.0 错误信息:[ERROR][Entrypoint]:mysqldfailedwhileat......
  • The Power of Diagnostic Kits: Unleashing the Potential of John Deere Service Adv
    Intherapidlyevolvingworldofautomotivediagnostics,theimportanceofreliableandefficientdiagnostictoolscannotbeoverstated.Thesetoolsserveasalifelinefortechniciansandmechanics,enablingthemtoidentifyandresolveissuesquicklyan......
  • Pycharm快捷键
    折叠(展开)所有代码这里是指按下快捷键后凡是.py文件里可折叠的都折叠。折叠所有代码:Ctrl+Shift+-(减号)展开所有代码:Ctrl+Shift++(加号)折叠(展开)某一层所有代码这里指的是比如if嵌套一个for两个都可折叠,那么光标在 if 按下此快捷键每一层都折叠。折叠某一层所有代码......
  • 【效率提升】手把手教你如何使用免费的 Amazon Code Whisperer 提升开发效率堪比 GitH
    说明GitHubcopilot虽然很强,但是一个月10美金的费用拿来吃个小火锅他不香吗?而身为云计算博主将向你推荐一款可以平替GitHubcopilot并且免费的支持多种编程语言的AI编程助手AmazonCodeWhisperer。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术......
  • Vue的数组操作方法和JavaScript原生数组方法有什么区别?
    Vue的数组操作方法和JavaScript原生数组方法之间存在一些区别,主要体现在对响应式更新的处理上。#####1:响应式更新:Vue数组操作方法是对JavaScript原生数组方法的封装,能够触发Vue的响应式更新机制。这意味着当你使用Vue的数组操作方法修改数组时,Vue会自动检测到数组的变化......
  • qt程序调用cuda-11.7,cmake编译时,提示:"CMakeCUDACompilerId.cu" failed. Compiler:
    报错显示:Running/home/wc/software/cmake-3.26.3-linux-x86_64/bin/cmake/home/wc/work/junke_src/missile-sim'-GCodeBlocks-UnixMakefiles'in/home/wc/work/junke_src/build/debug.CMakeErrorat/home/wc/software/cmake-3.26.3-linux-x86_64/share/cmak......
  • artifactId
    artifactId是项目的唯一标识符,实际对应项目名称1。在Maven项目中,用来定义项目组的唯一标识符,其命名规则是:企业网址反写+项目名2。例如2:groupId:com.exampleartifactId:sample-app......