2010-07-24 53 views
3

我想檢查一個日期格式,看看我能否檢查數據變量具有特定格式如MM-DD-YYYY。如果沒有,則退出()。我不知道如何檢查格式,如果有人能幫助我,我將不勝感激。謝謝...如何檢查在PHP中的數據格式

$date=05/25/2010;  
if(XXXXX){ 
    // do something.... 
} 
+0

謝謝你們。我還沒有投票給你們。 投票給我,使我達到15的聲望,我給你所有+1 ..:D – user401184 2010-07-24 18:52:40

回答

2

使用正則表達式,如其他人所說。然而之前發佈的版本會接受99/99/9999的無效日期。這裏有一個改進的正則表達式(從here lifed)

$date_regex = '!^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$!'; 
if (preg_match($date_regex, $date)) { 
    // do something 
} 

它只會採取有效日期,它也將接受不同的分隔符(如2002年5月20日和2002年5月2日)。

如果你問我,強迫用戶輸入特定格式的用戶體驗不好。您可以使用strtotime()處理不同的格式。

+0

不錯....非常感謝! – user401184 2010-07-24 18:51:55

+0

謝謝你。我還沒有投票給你們。投票給我,讓我到15聲望,我給你所有+1 – user401184 2010-07-24 18:57:42

+0

如果我只想要兩種格式只有mm-dd-yyyy或yyyy-mm-dd,我應該創建兩個正則表達式嗎?謝謝。 – user401184 2010-07-24 19:00:06

4

可以使用regular expressions

if(preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/")) 
{ 
    do something 
} 
+0

注意:以無效輸入(如00/00/0000) – NullUserException 2010-07-24 18:41:21

+0

謝謝你。我還沒有投票給你們。投票給我,讓我15聲望,我給你所有+1 – user401184 2010-07-24 18:56:20

2

如果你想這樣做是爲了限制用戶的輸入,你總是可以在用戶輸入使用strtotime()和轉換它轉換爲unix時間戳,然後使用date()函數來顯示它的方式。

如果你真的想確定它是否處於某種格式,或只需要某種格式,具有正則表達式的preg_match()會有幫助,我相信他們在那個頁面上有解析日期的例子。如果沒有它會是這樣的:

if (preg_match('~[0-9]{2}-[0-9]{2}-[0-9]{4}~', $dateStr)) { echo 'Correct format'; }

與明顯的缺陷是日期可能通過格式測試,但可能不是一個有效日期。在我看來,接受用戶輸入中的任何日期,並使用strtotime/date來達到你想要的格式。

+0

非常好的一個。非常感謝。 – user401184 2010-07-24 18:51:02

+0

謝謝你。我還沒有投票給你們。投票給我,讓我的15聲望,我給你所有+1 – user401184 2010-07-24 18:55:46

1

如果我理解正確,你想檢查一個字符串,以確保它遵循MM-DD-YYYY模式?

如果是這樣,我會建議兩個檢查:一個以確保它遵循數字的一般模式,另一個檢查月份是第一個和第二個。

function checkDate($date) 
{ 

    if (preg_match("/[0|1][0-9]/[0-9][1-9]/[0-9]{4}/",$date) 
    { 
     if (substr($date,0,2)<=12 && substr($date,3,2)<=31) 
     { 
      return true; 
     } 
    } 
    return false 

} 

更新:加在三天的檢查,以確保它是有效的,基於NullUser的評論

+0

這仍然需要無效輸入,如12/99/2000 – NullUserException 2010-07-24 18:40:54

+0

謝謝你。我還沒有投票給你們。投票給我,讓我15聲望,我給你所有+1 – user401184 2010-07-24 18:57:00