我想驗證使用PHP的日期。驗證日期格式在php
我想下面的格式是有效的:
d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy
我試過很多的正則表達式和了checkdate不同的變化()函數。目前,我有這樣的事情:
function _date_is_valid($str)
{
if(strlen($str) == 0)
return TRUE;
if(substr_count($str,'/') == 2)
{
if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))
{
$datearray = explode('/',$str);
if($datearray[2] > 2030)
return FALSE;
return checkdate($datearray[1], $datearray[0], $datearray[2]);
}
else
{
return FALSE;
}
}
return FALSE;
}
然而,這驗證帶像11/11/200和11 /200分之11#日期
我如何驗證日期,以匹配要求的格式?
編輯:我可以檢查datearray [2]介於10和30之間,2010和2030.但有沒有辦法使用正則表達式來檢查它?
編輯1:在strlen($ str)上返回TRUE == 0是因爲我希望用戶能夠添加事件而不知道事件何時發生,以便其他人可以限定日程並將事件分配到特定日期
只是爲了記錄。我落得這樣做:
function _date_is_valid($str)
{
if(strlen($str) == 0) //To accept entries without a date
return TRUE;
if(substr_count($str,'/') == 2)
{
list($d,$m,$y) = explode('/',$str);
if(($y >= 10 && $y <= 30) || ($y >= 2010 && $y <= 2030))
{
return checkdate($m,$d,$y);
}
}
return FALSE;
}
感謝您的答案
應該是checkdate(),而不是check_date()。除此之外,我看起來不錯。 +1 – 2010-01-18 14:29:40
如果你沒有檢查'/'的計數它會拋出一個PHP通知或警告在無效的字符串 – antpaw 2010-01-18 14:31:33
我修改了這個有點不驗證日期後,某些年作爲PHP checkdate()驗證像20111年這種情況不是我想要的 – LukeP 2010-01-18 14:51:52