RFC 2822和ISO 8601日期格式的正则表达式

7
在JavaScript中有Date.parse()方法,它解析表示RFC 2822ISO 8601日期的字符串(参见MDN)。在网络上存在大量不同的来源,什么是最可靠和全面的正则表达式,能够分别匹配这些日期格式? 更新: 如果没有合理的方法可以得到全面的正则表达式来完全匹配这些格式,那么至少有哪些模式是对于这些特定的 RFC 和 ISO 格式的,Date.parse() 方法接受并正确理解。

我认为这不可能通过正则表达式实现。 - Avinash Raj
1个回答

7
我认为答案是说没有单一的正则表达式(或者说这样做是一个很棘手和困难的坏主意)可以匹配RFC 2822或ISO 8601中列出的所有格式。此外,拥有一个正则表达式来匹配所有格式并不是一个安全而好的方法。但是,如果你有任何特定的格式,那么我们可以使用正则表达式

你可以查看date.jsmoment.js

编辑:

同样的MDN说:

参数

dateString:表示RFC822ISO 8601日期的字符串。

描述

解析方法接收一个日期字符串(例如"Dec 25, 1995"),并返回自1970年1月1日00:00:00 UTC以来的毫秒数。本地时区用于解释不包含时区信息的参数。此函数可用于基于字符串值设置日期值,例如与setTime方法和Date对象结合使用。

给定表示时间的字符串,解析方法将返回时间值。它接受RFC822 / IETF日期语法(RFC 1123第5.2.14节及其他地方),例如"Mon, 25 Dec 1995 13:30:00 GMT"。它了解美国大陆的时区缩写,但通常应使用时区偏移量,例如"Mon, 25 Dec 1995 13:30:00 GMT+0430"(格林威治子午线东4小时30分钟)。如果未指定时区,则假定为本地时区。GMT和UTC被视为等效。

或者,日期/时间字符串可以采用ISO 8601格式。从JavaScript 1.8.5 / Firefox 4开始,支持ISO 8601的子集。例如,"2011-10-10"(仅日期)或"2011-10-10T14:48:00"(日期和时间)可以传递和解析。ISO日期中的时区尚未得到支持,因此例如"2011-10-10T14:48:00+0200"(带有时区)尚未得到预期结果。

来自这里

这个格式包括仅日期的表单:

  • YYYY
  • YYYY-MM
  • YYYY-MM-DD

...

所有数字必须是十进制。如果MM或DD字段不存在,则使用“01”作为值。如果mm或ss字段不存在,则使用“00”作为值,缺少sss文件的值为“000”。缺少时区偏移量的值为“Z”。

还要检查这个


可以使用正则表达式实现,但代码会变得非常冗长,而且回溯也会成为一个噩梦。 - Vasili Syrakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接