【问题标题】:YYYY/MM/DD date format regular expressionYYYY/MM/DD 日期格式正则表达式
【发布时间】:2023-04-07 13:46:02
【问题描述】:

我想在 C# 中使用正则表达式来匹配这些日期格式,如下所示。

  1. YYYY/MM/DD 2013/11/12
  2. YYYY/M/DD 2013/5/11
  3. YYYY/MM/D 2013/10/5
  4. YYYY/M/D 2013/5/6

我尝试了一些正则表达式,但它们无法匹配 4 种日期格式。 比如

^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])

【问题讨论】:

  • 您需要匹配 0 的 0 或 1 个实例,因此您需要在 0 之后添加一个 ?

标签: c# regex


【解决方案1】:

检查this 以了解正则表达式和验证日期的复杂性。所以我会使用

\d{4}(?:/\d{1,2}){2}

然后在 c# 中做任何事情来验证匹配。虽然可以完成,但您将花费大量时间来尝试实现它,尽管该帖子中有一个正则表达式,据说可以通过一些摆弄来验证正则表达式中的日期,但它是一个看起来很吓人的正则表达式

【讨论】:

  • 你能解释一下你为什么使用 吗?:据我所知,它也可以工作。
【解决方案2】:

试试

^\d{4}[-/.]\d{1,2}[-/.]\d{1,2}$

花括号{} 给出了允许的数字。例如,\d{1,2} 表示一位或两位数字。

【讨论】:

  • @Michael 乐于助人!如果您还没有看到它,this 站点是我所依赖的正则表达式详细信息的参考。
【解决方案3】:

您可能需要更多才能匹配日期。试试这个:

(19|20)\d\d([-/.])(0?[1-9]|1[012])\2(0?[1-9]|[12][0-9]|3[01])

【讨论】:

    【解决方案4】:

    Ajit 的正则表达式更接近完美,但泄漏了以 12 和 16 结尾的闰年的评估。这里是完美的更正

    ((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))-((0[13578])|(1[02]))-((0[1-9])|([12][0-9])|(3[01])))|((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))-((0[469])|11)-((0[1-9])|([12][0-9])|(30)))|(((000[48])|([0-9]0-9)|([0-9][1-9][02468][048])|([1-9][0-9][02468][048])|([0-9]0-9)|([0-9][1-9][13579][26])|([1-9][0-9][13579][26]))-02-((0[1-9])|([12][0-9])))|((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))-02-((0[1-9])|([1][0-9])|([2][0-8])))
    

    【讨论】:

    • 不适用于无效日期的 1900-02-29 和 2100-02-29。此外,您可以用 \d 替换 [0-9] 使您的正则表达式更短
    【解决方案5】:
    ((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))\-((0[13578])|(1[02]))\-((0[1-9])|([12][0-9])|(3[01])))|((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))\-((0[469])|11)\-((0[1-9])|([12][0-9])|(30)))|(((000[48])|([0-9][0-9](([13579][26])|([2468][048])))|([0-9][1-9][02468][048])|([1-9][0-9][02468][048]))\-02\-((0[1-9])|([12][0-9])))|((([0-9][0-9][0-9][1-9])|([1-9][0-9][0-9][0-9])|([0-9][1-9][0-9][0-9])|([0-9][0-9][1-9][0-9]))\-02\-((0[1-9])|([1][0-9])|([2][0-8])))
    

    这是yyyy-MM-dd 格式的正则表达式。

    您可以将- 替换为\/ 以获得yyyy/MM/dd...

    测试工作完美..

    【讨论】:

    • 这伤害了我的眼睛。 ;)
    • 不适用于无效日期的 1900-02-29 和 2100-02-29。此外,您可以用 \d 替换 [0-9] 使您的正则表达式更短
    【解决方案6】:

    试试这个。这接受所有四种模式

    @"\d{4}[- /.]([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])"
    

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多