J'essaie de valider la date en utilisant PHP.Validez le format de la date en php
Je voudrais les formats suivants pour être valide:
d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy
J'ai essayé beaucoup d'expressions régulières et des variations différentes de la fonction checkdate(). À l'heure actuelle, j'ai quelque chose comme ceci:
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;
}
Cependant, cela valide les dates comme 11/11/200 et 11/11/200 #
Comment puis-je valider ce jour pour correspondre format requis? Editer: Je pourrais vérifier datearray [2] pour être entre 10 et 30 et 2010 et 2030. Mais est-il un moyen de le vérifier en utilisant regex? Edit1: return TRUE sur strlen ($ str) == 0 parce que je veux que les utilisateurs puissent ajouter des événements sans savoir quand l'événement se produira afin que quelqu'un d'autre puisse qualifier l'horaire et assigner l'événement à une certaine date plus tard
Juste pour l'enregistrement. J'ai fini par faire:
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;
}
Merci pour toutes vos réponses
Devrait être checkdate(), pas check_date(). A part ça, ça me va bien. +1 –
si vous ne vérifiez pas le nombre de '/' il jettera un avis php ou un avertissement sur les chaînes invalides – antpaw
Je l'ai modifié un peu pour ne pas valider les dates après certaine année car php checkdate() valide des années comme 20111 qui dans ce cas n'est pas ce que je veux – LukeP