2011-04-26 90 views
2

我想使用PHP正則表達式來計算日期字段「YYYYMMDD」。我想是這樣的php日期格式正則表達式檢查

/([0-9]{4})([0-9]{2})([0-9]{2})/ 

,但在這其中,它會接受任何兩個數字像01-99的MM或DD,但我希望有東西給01-12爲MM和01-31爲DD。任何建議這樣做?

感謝

+2

可能需要添加一些PHP代碼進行驗證 – Znarkus 2011-04-26 19:19:41

+2

正則表達式不是有效日期的方式,除非是最粗略的方式(例如「它是所有數字」)。 '2011年2月29日'將被接受,即使這不是有效的日期,因爲2011年不是一個閏年。 – 2011-04-26 19:28:02

+0

@all,我同意原因,將寫一個PHP的fucntion。謝謝。 – Jay 2011-04-26 19:41:57

回答

3

而不是正則表達式你也可以分割字符串,並使用checkdate,看看日期是有效的。

+0

我如何將20091010分成3部分?我沒有任何分隔符,我是否應該計算數字並拆分它? – Jay 2011-04-26 19:58:27

+0

如果你確定你有'YYYYMMDD',你可以使用'substr()'。 – 2011-04-26 20:00:55

+0

謝謝,我這樣做,它的工作。謝謝大家。我將如何把我的示例代碼放在這裏?它是[代碼] tabg? – Jay 2011-04-26 20:51:29

0

月,你可以使用:

(0[1-9]|1[012]) 

對於天:

(0[1-9]| [12][0-9]|3[01]) 

一些很好的例子here

+0

短於31天/閏年等月份?恕我直言,全面驗證對於* regexp *來說太麻煩了。 – 2011-04-26 19:22:34

+0

真的,更短的版本不會工作...給定的格式是'YYYYMMDD'。 – Ryan 2011-04-26 19:29:20

4

這應該做的工作:

function dateValidate($date) { 
    $t = strtotime($date); 
    return date('Ymd', $t) == $date; 
} 

編輯:值得關注的是這不會是一樣快的正則表達式,但在明顯的性能方面將正常工作。

+0

我會試試這個,謝謝。 – Jay 2011-04-26 19:42:12

1

對於日期驗證,Regex似乎不太實際。爲什麼不把它分成幾塊,然後用checkdate()

0

不要使用checkdate作爲checkdate('1 \'','1','2000')驗證TRUE。