130 votes

PHP Regex pour vérifier que la date est au format AAAA-MM-JJ

J'essaie de vérifier que les dates saisies par les utilisateurs finaux sont dans le format AAAA-MM-JJ. Les Regex n'ont jamais été mon point fort, je continue à obtenir une fausse valeur de retour pour le preg_match() que j'ai configuré.

Je suppose donc que j'ai fait une erreur dans l'expression rationnelle, détaillée ci-dessous.

$date="2012-09-12";

if (preg_match("^[0-9]{4}-[0-1][0-9]-[0-3][0-9]$",$date))
    {
        return true;
    }else{
        return false;
    }

Des idées ?

4voto

kasimir Points 740

Vous pourriez aussi le faire comme ceci :

if (DateTime::createFromFormat('Y-m-d', $date)->format('Y-m-d') === $date) {

    // date is correctly formatted and valid, execute some code

}

Cela permettra de vérifier non seulement le format, mais aussi la validité de la date elle-même, puisque DateTime ne créera que des dates valides et cela doit correspondre à l'entrée.

4voto

jack Points 401

Vous pouvez utiliser

function validateDate($date, $format = 'Y-m-d H:i:s')
{
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

$date="2012-09-12";    
echo validateDate($date, 'Y-m-d'); // true or false

3voto

Hasib Kamal Points 742

Format 1 : $format1 = "2012-12-31" ;

Format 2 : $format2 = "31-12-2012" ;

if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$format1)) {
    return true;
} else {
    return false;
}

if (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-[0-9]{4}$/",$format2)) {
    return true;
} else {
    return false;
}

2voto

ujovlado Points 180

Si vous voulez faire correspondre ce type de date, utilisez :

preg_match("~^\d{4}-\d{2}-\d{2}$~", $date)

2voto

Kenzo Points 800

Cela devrait vous indiquer si le format est valide et si la date saisie est valide.

    $datein = '2012-11-0';

    if(preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/', $datein)){
        echo 'good';
    }else{
        echo 'no good';
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X