Bonjour,

Toujours soucieux d'essayer de piger ces prises de tète d'expressions régulières, , j'essaye de valider une date toute simple (soyez gentils de pas rigoler de mon désespoir )

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
	$subject = "2010-13-14";
	$pattern = "#(?<année>(19|20)\d{2})-(?<mois>(0|1)(?(2)[1-9]|[0-2]))#";
 
	if (preg_match_all($pattern, $subject, $matches)) {
		echo $matches['année'][0]."\n";
		echo $matches['mois'][0]."\n";
	}else{
		echo 'raté';
	}
Avec le code ci-dessus, j'essaye de valider avec un sous-masque conditionnel le mois qui doit se trouver en seconde position.

Le code passe sans erreur mais le pattern valide les mois jusqu'à 19.

Pour moi, "(0|1)(?(2)[1-9]|[0-2])" veut dire que

- je cherche si le premier chiffre est un 0 ou un 1
- dans la condition, si c'est le premier choix qui est trouvé (donc 0) le masque à utiliser pour le suivant est un chiffre de 1 à 9
- sinon, c'est un chiffre de 0 à 2

Quelqu'un pourrait m'expliquer ce qui manque dans mon code svp, parce que je vais craquer ?

Papy