2011-06-04 25 views
0

如何確保選定的日期時間值介於給定的時間範圍之間。 即如何使用正則表達式獲得有效的時間範圍

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

爲什麼你想要使用正則表達式? – Johnsyweb 2011-06-04 10:23:42

+0

轉換爲日期並使用Date.before()等來測試範圍 – Bohemian 2011-06-04 10:46:38

+2

允許的範圍是什麼,或者我們應該猜測? – 2011-06-04 10:46:55

回答

4

正則表達式匹配字符串,而不是數字或數字範圍。因此,您需要考慮所有有效時間/日期的文本表示並分析它們。

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 

明白爲什麼這不是一個好主意?

+0

這真的是一個很好的答案,顯示爲什麼正則表達式不總是很好用,謝謝分享這個! – eFloh 2011-06-04 16:32:58