我应该使用什么正则表达式来匹配这个日期模式:DAY.month.YEAR?

时间:2011-06-28 12:07:59

标签: javascript regex datetime date

我有这种日期格式:

DAY.month.YEAR (today: 28.06.2011)

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

任何人都可以针对此问题发布解决方案吗?

2 个答案:

答案 0 :(得分:8)

派生自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日。

答案 1 :(得分:2)

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

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

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