2012-07-16 381 views
5

我想創建一個正則表達式來匹配一個字符串,其中包含MySQL時間戳格式的日期,例如「2012-07-16 02:04: 33" 。正則表達式匹配MySQL時間戳格式「YMD H:M:S」

它並不像聽起來那麼容易,例如,你不應該在2月30日結束。

我知道有更簡單的方法來做到這一點,但我依賴於能夠傳遞字符串和正則表達式來評估該字符串。

我會很高興的任何建議。

回答

12

正則表達式:

/^(((\d{4})(-)(0[13578]|10|12)(-)(0[1-9]|[12][0-9]|3[01]))|((\d{4})(-)(0[469]|1‌​1)(-)([0][1-9]|[12][0-9]|30))|((\d{4})(-)(02)(-)(0[1-9]|1[0-9]|2[0-8]))|(([02468]‌​[048]00)(-)(02)(-)(29))|(([13579][26]00)(-)(02)(-)(29))|(([0-9][0-9][0][48])(-)(0‌​2)(-)(29))|(([0-9][0-9][2468][048])(-)(02)(-)(29))|(([0-9][0-9][13579][26])(-)(02‌​)(-)(29)))(\s([0-1][0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]))$/ 

做這項工作。感謝您的意見。

+1

很高興看到你發佈瞭解決你的問題的答案,以幫助下一個出現的問題! – Fluffeh 2012-09-28 08:41:12

+0

此答案使用datetime字符串'2013-11-27 14:43:29'不正確。 http://codepad.viper-7.com/sOTV9U – 2014-12-08 14:46:39

+0

'codepad.viper-7.com/sOTV9U - 編碼器'是正確的。它確實失敗了幾個日期,包括'2013-11-27 14:43:29'。我找到了一些拼寫錯誤並修正了它:'/ ^(((\ d {4})( - )(0 [13578] | 10 | 12)( - )(0 [1-9] | [12] [0 -9] | 3 [01]))|((\ d {4})( - )(0 [469] | 11)( - )(0 [1-9] | [12] [0-9] | 30))|((\ d {4})( - )(02)( - )(0 [1-9] | [12] [0-9] | 2 [0-8]))|(([ 02468] [048] 00)( - )(02)( - )(29))|(([13579] [26] 00)( - )(02)( - )(29))|(([O- 9] [0-9] [0] [48])( - )(02)( - )(29))|(([0-9] [0-9] [2468] [048])( - ) (02)( - )(29))|(([0-9] [0-9] [13579] [26])( - )(02)( - )(29)))(\ S)(( [0-1] [0-9] | 2 [0-4]):([0-5] [0-9]):([0-5] [0-9]))$ /'Thanks henrikstroem 。這幫了我一噸!:) – racl101 2015-07-04 19:09:43

7

你應該在2個步驟中完成,而不是嘗試使用真正複雜的正則表達式。

Step1:使用正則表達式檢查格式是否正確。 使用類似

/^\d\d\d\d-(\d)?\d-(\d)?\d \d\d:\d\d:\d\d$/g

第二步:如果匹配,使用類似於PHP strtotime()東西(或取其語言使用的是使用日期時間函數解析),並檢查結果是有效的,以消除像2月30日這樣的日期。

+0

嗯,這不是我正在尋找的東西。我一般同意這種方法,但我需要能夠將正則表達式與字符串一起傳遞。 – henrikstroem 2012-07-18 19:47:41

+0

你會遇到太多情況。例如,有不同天數的月份等等,還有'閏日'問題。 – 2012-07-18 19:58:01

+2

經過大量的谷歌搜索之後,我發現了這個正則表達式的怪獸:'/ ^(((\ d {4})( - )( 0 [13578] | 10 | 12)( - )(0 [1-9] | [12] [0-9] | 3 [01]))|((\ d {4})( - )(0 [ 469] | 11)( - )([0] [1-9] | [12] [0-9] | 30))|((\ d {4})( - )(02)( - )(0 [1-9] | 1 [0-9] | 2 [0-8]))|(([02468] [048] 00)( - )(02)( - )(29))|(([13579 ] [26] 00)( - )(02)( - )(29))|(([0-9] [0-9] [0] [48])( - )(02)( - )(29 ))|(([0-9] [0-9] [2468] [048])( - )(02)( - )(29))|(([0-9] [0-9] [13579 ] [26])( - )(02)( - )(29)))(\ S([0-1] [0-9] | 2 [0-4]):([0-5] [0 -9]):([0-5] [0-9]))$ /'從這裏[http://www.webdeveloper.com/forum/showthread.php?t=178277](http://www .webdeveloper.com/forum/showthread.php?t = 178277)。 – henrikstroem 2012-07-19 09:29:00