Pb php/regex sur le nombre de caractères [Résolu/Fermé]

Signaler
Messages postés
96
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 juin 2012
-
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
-
Bonjour,
voici mon code :
<form method="post" action="index.php">

		<input type="text" name="text" /><br />
		<input type="submit" name="submit" value="Envoyer" />
		 
		<?php
			if(isset($_POST['submit'])){
			
				$Chaine=($_POST['text']);
				$Reg = "#[a-zA-Z0-9]{4,6}#";
				
				if(preg_match($Reg, $Chaine)){
					echo("c'est bien");
				}
				else{
					echo("c'est pas bien");
				}
			}
			else{
			}
		?>
	</form>


Alors voila, j'ai pas mal de regex dans le même gout a exploiter et le même problème reviens sans cesse et je voulais savoir si quelqu'un y avait déja était confronté.

Quelque soit la chaine que je rentre le regex fonctionne nikel (en même temps il est pas bien compliqué) sauf que voila, vu que je limite le nombre de caractère il devrait m'afficher un message d'erreur si la chaine fait plus de 6 caractère ou moins de 4.

Pour le moins de 4 y a pas de soucis, mais alors pour le plu de 6 je peux écrire un roman qu'il m'affiche toujours bon.

Comme on dit à force de rester planter des heures devant son programme on ne voit plus les erreurs les plus basiques, alors si quelqu'un avais l'amabilité de me dire ou je me suis trompé, merci.

6 réponses

Messages postés
96
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 juin 2012
14
C'est bon c'est trouvé, c'était :
$Reg = ("#^[a-zA-Z0-9]{4,6}$#");


Merci encore ^^
et merci Alain_42
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 86488 internautes nous ont dit merci ce mois-ci

ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
30
lol
Messages postés
306
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
13 avril 2010
52
Bonjour,

Preg_match permet de sortir plusieurs pattern dans une meme chaine et de retourner le nombre de pattern trouve ...

TTDDFFGGHHHH te retourneras 2 patterns ou 3 ... Je ne sais pas bien, != 0 donc on tombe dans le "c'est bien"...

Tu devrais verifier comme suit :
if(preg_match($Reg, $Chaine) = 1 ){
echo("c'est bien");
}
else{
echo("c'est pas bien");
}

Maintenant, c'est un debut de reflexion, et j'ai pas mon easyphp sous la main pour faire le test ;-P
preg_match ne te renverra que 0 ou 1 ! utilise plutot preg_match_all si tu veux compter le nombre d'occurence d'un pattern.

Or, ici, ce n'est pas le bon raisonnement. Ce que je ferais moi c'est une extraction du premier mot grâce à ce pattern '/\b(\w*?)\b/' et la fonction preg_match (n'oublie pas qu'on peut récupérer le resultat d'un preg_match dans un troisième paramètre d'entrées. puis un simple test sur strlen devrait faire l'affaire
Messages postés
265
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
18 mars 2014
45
Bonjour,

Je viens de voir sur le forum qui tu avais quelques difficultés avec les expressions régulières.

Je te propose quelques sites qui pourront t'aider :
- PHP : http://www.switchplane.com/utilities/preg_match-regular-expression-tester.php
- JS : http://quentinc.net/testeur-expressions-regulieres s/
- JS : https://www.toutjavascript.com/service/regexp.php

Bonne chance,
Messages postés
96
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 juin 2012
14
Non, ça change rien apperement.

<form method="post" action="index.php">
		<input type="text" name="text" /><br />
		<input type="submit" name="submit" value="Envoyer" />
		 
		<?php
			if(isset($_POST['submit'])){
			
				$Chaine=($_POST['text']);
				$Reg = "#[a-zA-Z0-9]{1,2}#";
				
				if(preg_match($Reg, $Chaine) == 1){
					echo("c'est bien");
					echo(preg_match($Reg, $Chaine));
				}
				else{
					echo("c'est pas bien");
				}
			}
			else{
			}
		?>
	</form>


Il réagit toujours de la même manière.

Le soucis c'est le quantificateur "{1,2}". Le "{1" y a pas de soucis, mais quand on arrive au ",2}" il continue de valider.
Messages postés
306
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
13 avril 2010
52
Petit extrait de php.net

preg_match() retourne le nombre de fois où le masque pattern a été trouvé. Cela peut aller de 0 (pas de solution) à un 1 car preg_match() s'arrête dès qu'elle a trouvé une première solution. preg_match_all(), au contraire, va continuer jusqu'à la fin de la chaîne subject . preg_match() retourne FALSE si une erreur survient.
Donc effectivement, verifier égale à un est pas terrible ;-P sauf si tu utilises preg_match_all car la, il te faut 1.

T'essayes ?
Messages postés
96
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 juin 2012
14
Voici le code :

<form method="post" action="index.php">
		<input type="text" name="text" /><br />
		<input type="submit" name="submit" value="Envoyer" />
		 
		<?php
			if(isset($_POST['submit'])){
			
				$Chaine=($_POST['text']);
				$Reg = ("#[a-zA-Z0-9]{1,2}#");
				
				if(preg_match_all($Reg, $Chaine) == 1){
					echo("c'est bien");
				}
				else{
					echo("c'est pas bien");
				}
			}
			else{
			}
		?>
	</form>


Voici le message d'erreur générée :

Warning: preg_match_all() expects at least 3 parameters, 2 given in C:\wamp\www\essai\index.php on line 20


Je continue d'esayer au cas ou