正则表达式匹配类型 : ddmmyyyy 的日期

标签 regex

我正在尝试匹配类型的日期:ddmmyyyy ,例如:04072001 到目前为止我有这个:

^(?:(?:31(?:0?[13578]|1[02]))\1|(?:(?:29|30)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:290?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

here 几乎相同但没有分隔符( (\/|-|\.) )

最佳答案

您可以使用更简单的东西,如下所示:

^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])([12]\d{3})$

它捕获日、月、年,并验证除 2 月 29 日是否确实是闰年之外的所有内容。 (为此,我只需对捕获的年份/日期执行数学运算,而不是尝试将其写入表达式中)。

工作示例:http://regex101.com/r/dH8mG3

解释:

- Capture the day: 01-29
    - OR 31, if not succeeded by 02, 04, 06, 09, or 11
    - OR 30, if not succeeded by 02

- Capture the month: 01-12
- Capture the year: 1000-2999 (you could narrow this down 
                               by using number ranges like
                               (1[8-9]\d{2}|20\d{2}) == 1800-2099

关于正则表达式匹配类型 : ddmmyyyy 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125558/

相关文章:

带有国际字母的 Java 正则表达式

javascript - 通过 jQuery 将 HTML 代码更改为 HTML

如果找到下一个字母,Ruby 将替换字符串

Python 后视正则表达式问题 : Invalid regular expression: look-behind requires fixed-width pattern

python - 使用 python 进行正则表达式处理

java - 分隔符提取以分号分隔的元素

c# - c#中的字母数字正则表达式

regex - 在 golang 正则表达式中获取子组的命名列表

mysql - 用于检查字符串开头或结尾处是否有空格的 RegEx 模式

c - 正则表达式检测 c 函数体的开头