2012-02-15 22 views
7

有人能告訴我我的方式錯誤,當談到這個正則表達式:正則表達式幫助日期驗證 - DD/MM/YYYY - PHP

if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) { 
    echo 'error'; 
} 

基本上,我想這顯示錯誤消息每次 - 除非格式正確(dd/mm/yyyy)。

我在做什麼錯誤與上述?

非常感謝任何指針。

- 更新上述正則表達式發佈後不久 - 歉意不便 -

+1

使用在線正則表達式測試儀前。 http://www.regexpal.com/ – betontalpfa 2017-02-01 16:56:41

回答

15

我想你應該還有反斜槓/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/

+0

非常感謝。我會馬上打勾:) – michaelmcgurk 2012-02-15 12:39:17

+0

謝謝。這項工作也適用於我。投票給你。 – 2017-12-05 17:09:49

4

需要,因爲你正在使用它作爲正則表達式定界符逃脫斜線

/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/ 

,或者使用不同的正則表達式定界符

#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$# 
+0

太棒了。現在完美地工作。傻我:) – michaelmcgurk 2012-02-15 12:38:51

4

您也可以使用這一個:

([0-2]\d|3[0-1])\/(0\d|1[0-2])\/(19|20)\d{2} 
如果你想日期和月份之間的區別

,也驗證只有2世紀。

+0

如果你需要捕獲'^([0-2] \ d | 3 [0-1])\ /(0 \ d | 1 [0-2])\ /((??19 | 20)\ d {2})$'並且還添加了開始和結束錨點。此外還有一個錯誤,日期爲零的日期和月份將工作'00/00/1999'。 – 2016-11-02 07:28:28

2

我用這個檢查日期

private function validate_date($date, $empty_allowed = true) { 

    if (empty($date)) { 
     return $empty_allowed; 
    } 

    if (! strpos($date, '/')) { 
     return false; 
    } 

    if (substr_count($date, '/') !== 2) { 
     return false; 
    } 

    if (preg_match('/(0[1-9]|1[0-9]|3[01])\/(0[1-9]|1[012])\/(2[0-9][0-9][0-9]|1[6-9][0-9][0-9])/', $date) !== 1) { 
     return false; 
    } 

    $split = explode('/', $date); 

    return checkdate($split[1], $split[0], $split[2]); 

}