pb vérification format date par expression régulière

Eléphant du PHP | 112 Messages

20 déc. 2010, 12:57

Bonjour,

Un petit problème de vérification php de saisie de format de date:
if(preg_match("^[0-3][0-9]\/[0-1][0-9]\/[0-9]{4}$", "10/12/2004")){echo "date conforme";}
		 else echo "date non conforme";
J'ai toujours

Code : Tout sélectionner

date non conforme
et je ne comprends pas pourquoi.
Une lumière...?
Merci d'avance,
cordialement,

Thierry

PS: Évidemment ce serait bien de faire un contrôle de saisie préalable avec javascript, mais je ne sais pas faire. Heu, si... quelqu'un...

Eléphant du PHP | 99 Messages

20 déc. 2010, 14:41

Bonjour,

Tu as oublier les /

Essai ceci:
if(preg_match("/^[0-3][0-9]\/[0-1][0-9]\/[0-9]{4}$/", "10/12/2004")){echo "date conforme";}
                 else echo "date non conforme";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 déc. 2010, 14:42

salut,

en abusant du transtypage de php et utilisant ta regexp qui est bon dans le sens ou tu l'entend je ferais ceci :
<?php
if ( !empty($_POST['date'])) {

	if (preg_match ('`^[0-3][0-9]\/[0-1][0-9]\/[0-9]{4}$`i',$_POST['date'])) {
	echo $_POST['date'] . ' la date est bonne !<br />';
	$date = explode('/',$_POST['date']);
if ( 0 < $date[0] && $date[0] <32) {
	if (0< $date[1] && $date[1] <13) {
	echo 'tout est ok<br />';
	}
	else {
		echo 'mois pas bon<br />';
	}
}
else {
echo 'jour pas bon<br />';
}
	}
	else {
	echo 'pas bon : <br />';
	var_dump($_POST['date']);
	}
}
?>
<html>
<head></head>
<body>
<form action="" method="post">
<label for="date">La date ?</label><input id="date" name="date" />
<br />
<input type="submit" value="tester" />
</form></body>
</html>
a voir mais il y a surement une autre solution avec les fonctions de date

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 112 Messages

20 déc. 2010, 17:35

Merci!

Effectivement, avec les slashes ça marche.
Avec le script de moogli, le contrôle est plus poussé.
Mais avant de le mettre en place, je vais aller vérifier comment le serveur traite les saisies non conformes. Je gage qu'il transforme un 34/16/12 en 31/12/12, et en ce cas le contrôle le plus simple m'ira bien.

Merci à tous les deux,
Et à bientôt pour une prochaine question...
Thierry