【问题标题】:How to get a valid Time range using Regular Expressions如何使用正则表达式获取有效的时间范围
【发布时间】:2011-06-04 21:44:04
【问题描述】:

我怎样才能确保选定的日期时间值在给定的时间范围内。 即

2/2/2011 8:10:30 is invalid but
2/2/2011 8:30:00 is a valid date

【问题讨论】:

  • 为什么要使用正则表达式?
  • 转换为日期并使用 Date.before() 等测试范围
  • 允许的范围是多少,或者我们应该猜测?
  • 抱歉,允许范围的示例是 8:30:00 到 13:00:00(下午 1:00:00)

标签: .net regex


【解决方案1】:

正则表达式匹配字符串,而不是数字或数字范围。因此,您需要考虑所有有效时间/日期的文本表示并对其进行分析。

因此,5 到 11 之间的数字将是 1[01]|[5-9] 等;这可能会因日期而变得任意复杂,尤其是在您需要验证用户输入的情况下。然后你的正则表达式需要知道闰年和所有这些——所有这些都是possible but nightmarish 来维护的。所以你真的需要考虑它是否真的是你想要的正则表达式......

对于你得到的8:30:00-13:00:00 范围(这里写成一个详细的正则表达式):

\b            # start of word
(?:           # Either match...
 13:00:00     # 13:00:00
|             # or
 (?:          # hours:
  1[012]      # 10-12
  |           # or
  0?9         # 9, optional leading 0
 )            # end of hours
 :            # colon
 [0-5][0-9]   # minutes: 00-59
 :            # colon
 [0-5][0-9]   # seconds
|             # or
 0?8          # hour: (0)8
 :            # colon
 [3-5][0-9]   # minutes 30-59
 :            # colon
 [0-5][0-9]   # seconds
)             # end of alternation.
\b            # end of word

明白为什么这不是一个好主意吗?

【讨论】:

  • 这确实是一个很好的答案,说明了为什么正则表达式并不总是很好用,感谢分享!
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2012-06-16
  • 2021-07-02
  • 2010-10-27
相关资源
最近更新 更多