我正在尝试使用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/11/200#之类的日期。
我该如何验证日期以匹配所需格式?
编辑:我可以检查datearray [2]是否在2010到2030年之间且在10到30之间。但是有没有一种使用正则表达式来检查它的方法?
编辑1:当strlen($str) == 0时返回TRUE的原因是我希望用户能够添加事件,而不知道事件发生的时间,以便其他人可以确定时间表并将事件分配给特定日期。
仅供记录。最终我做了:
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;
}
感谢您所有的回答