【问题标题】:Regex for Date in format dd.MM.yyyy?日期格式为 dd.MM.yyyy 的正则表达式?
【发布时间】:2010-07-01 08:29:29
【问题描述】:

尝试以这种格式dd.MM.yyyy 为日期创建regex

我想将它与DataAnnotation 一起使用,就像这样

[RegularExpression(@"<theregex>")]
public DateTime Date { get; set; }

【问题讨论】:

  • 是否必须考虑无效日期,例如 2010 年 2 月 30 日之类的事情,或者只是将看起来像日期的事情拉出来,然后您可以在之后检查它们?
  • 为什么需要正则表达式?使用Date.ParseExact()不是更好吗?
  • @Rowland Shaw 我使用 xVal 为 jquery.validation 生成规则
  • 使用 date.parse 或 yyyy.mm.dd 更聪明。如果有人来自美国看到日期格式,他们会尝试 02.30.2010...
  • @Rowland:Date.ParseExact() 不是数据注释的有效值。这些需要保持不变。

标签: c# .net regex


【解决方案1】:

我认为正则表达式并不是最好的方法。你没有给出上下文,所以很难猜出你在做什么整体......但你可能想创建一个 DateExpression 属性或类似的然后做:

return DateTime.ParseExact(value, "dd.MM.yyyy");

在定义转换器的地方。

【讨论】:

  • 我尝试了你的建议,我得到了No overload for method 'ParseExact' takes 2 arguments
【解决方案2】:
^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)[0-9]{2}$

此正则表达式匹配01.01.190001.01.2000,但不匹配1.1.20001/1/00

【讨论】:

  • 你至少可以让 0 成为可选的......它也不匹配 31.01.2000 :(
  • 肯定会匹配 31.01.2000?
  • 但它会在下一个千年打破:-)
【解决方案3】:
[0-3]{0,1}[0-9]\.[0-1]{0,1}[0-9]\.[0-9]{4,2}

匹配: 28.2.961.11.200812.10.2005

【讨论】:

    【解决方案4】:

    因为我总是觉得这个网站很有用,所以这里是一个online regex checker。在右侧,它还有示例和社区贡献。其中有许多日期匹配的正则表达式变体。

    如果您不确定哪个最适合您,您可以输入大量您希望匹配的日期并尝试一些不同的示例。与任何事情一样,有多种方法可以解决问题,但它可能会帮助您选择最适合的方法。

    【讨论】:

      【解决方案5】:
      ^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$ 
      

      这个也接受 - 和 / 作为分隔符。如果需要,您可以删除它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-04
        • 2012-10-09
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多