-2

另外,我非常感谢您的解释。抱歉,但我一生中从未使用过正则表达式,几乎无法阅读它们。

4

2 回答 2

3
\d{4}/\d{2}/\d{2}\s+\d{2}:\d{2}:\d{2}
  • \d是一个数字
  • {4}是数字的数量(它前面的正则表达式部分)
  • /只是一个斜线
  • :只是一个冒号
  • \s是任何空格
  • +是一个或多个空格(它前面的正则表达式部分)

请注意,这可能用于快速初始检查,但您应该使用其他方法检查完整日期格式,例如SimpleDateFormatRohit Jain 或 Jon Skeet 所宣传的。

于 2013-06-20T21:50:07.997 回答
1

正如其他人指出的那样,日期时间是不规则的表达方式。仅通过正则表达式验证是不可能的。仅闰秒就排除了这一点。您能做的最好的事情就是限制误报。但是,您消除的误报越多,表达式就越复杂。

对于时间组件,您可以使用它

([2][0-3]|[0-1][0-9]|[1-9]):[0-5][0-9]:([0-5][0-9]|[6][0])

  • [x]表示这匹配 x

  • [a-z]表示这匹配来自 az 的任何字母

  • a|b表示这匹配 a 或 b

  • (..)分组比赛

    所以

([2][0-3]|[0-1][0-9]|[1-9])将匹配 20-23 或 00-19 或 1-9

对于日期部分

\d{4}/([1][0-2]|[0][0-9])/([3][0-1]|[1-2][0-9]|[0][1-9]|[1-9])

正如你所看到的,它变得非常大,我们仍然有一些误报。

把它放在一起

\d{4}/([1][0-2]|[0][0-9])/([3][0-1]|[1-2][0-9]|[0][1-9]|[1-9]) ([2][0-3]|[0-1][0-9]|[1-9]):[0-5][0-9]:([0-5][0-9]|[6][0])

这将允许0000\02\31 01:59:60在这么多级别上无效。

它也不允许999\02\12 01:59:59,可以通过替换来 \d{4}补救\d+

+表示 1 个或多个。

我的正则表达式 foo 相当缺乏所以我总是去这里寻求帮助

ps 虽然日期时间通常为 60 秒 60 分钟 24 小时 365 天,但阴历/阳历并不稳定。有些日历忽略了这一点,UTC 没有,西方日历中最知名的人工制品是大约每 4 年在 2 月底添加一个闰日。下一个最常见的人工制品是在不规则的时期添加闰秒。这可以是正面的也可以是负面的,因此一分钟的长度可以在 59-61 秒之间。

于 2013-06-20T22:40:06.723 回答