【问题标题】:What regular expression should I use to match this date pattern: DAY.month.YEAR?我应该使用什么正则表达式来匹配这个日期模式:DAY.month.YEAR?
【发布时间】:2011-06-28 12:07:58
【问题描述】:

我有这种日期格式:

DAY.month.YEAR (today: 28.06.2011)

我需要一个正则表达式 (RegEx) 模式来匹配此日期格式。

谁能发布这个问题的解决方案?

【问题讨论】:

  • 你真的不需要正则表达式。将必要的逻辑编码到正则表达式中(每个月的天数、闰年等)只会一团糟。
  • 任何特定的口味,例如sed、perl、python、ruby、c#?匹配完整的字符串还是只匹配“28.06.2011”?任何限制,即“01.01.1066”是有效日期吗?
  • 是的,一些限制,即从当年开始等等,我将使用 JavaScript 中的表达式......它不能只匹配“28.06.2011”,而是任何日期以那种特定的格式;)

标签: javascript regex datetime date


【解决方案1】:

源自http://www.regular-expressions.info/dates.html:

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

这匹配 dd.mm.yyyy 格式的日期,从 01.01.1900 到 31.12.2099。但是,它仍然会匹配无效的日期,因为例如验证闰年不能用正则表达式完成(至少不是很容易)。

但是,可能不需要正则表达式。 Javascript 示例:

var date = "28.06.2011".split("."); // split up the date by the dots

// parse the components into integers
var day = parseInt(date[0]);
var month = parseInt(date[1]);
var year = parseInt(date[2]);

// if you want the date in a date object, which will fix leap years (e.g. 31.02 becomes 03.03
var date = new Date(year, month - 1, day);

请注意,在创建日期对象时,month 从零开始。

您使用哪种方法取决于您的需要。如果您想在文本中查找日期,请使用正则表达式。如果您只是想将日期解析为日期对象,请使用第二种方法。可能需要进行一些额外的验证以确保日期有效,因为 javascript Date 对象不关心 2 月有 31 天,它只是简单地覆盖到 3 月 3 日。

【讨论】:

  • @Jonas:二月提出的问题不能用正则表达式解决。
  • @Matt 这就是我想要表达的观点。 +1 添加另一个解决方案的答案。
【解决方案2】:

如果您希望匹配日期的格式,那么使用它就足够了:

\d\d\.\d\d\.\d\d\d\d

但是,正如 David Hall 在对您的问题的评论中指出的那样,您仍然需要验证代码中的日期。在正则表达式中执行此操作并不容易,正如您从 Harpyon 回答中看到的那样 - 仍然进行“初步检查以过滤掉许多错误的可能性” - 也接受 31.02.2011 作为有效日期并错过了法国大革命( 1789 年 7 月 14 日)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2010-12-10
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多