Création
d'entreprise
Posez votre question Signaler

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

AmeryCourtz 80Messages postés 16 février 2009Date d'inscription 15 février 2012Dernière intervention - Dernière réponse le 25 juil. 2011 à 12:49
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.
Lire la suite 

Pb php/regex sur le nombre de caractères »

8 réponses
Réponse
+1
moins plus
C'est bon c'est trouvé, c'était :
$Reg = ("#^[a-zA-Z0-9]{4,6}$#");


Merci encore ^^
et merci Alain_42
ktm620enduro- 25 juil. 2011 à 12:49
lol
Ajouter un commentaire
Réponse
+0
moins plus
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
Avalion - 1 juil. 2011 à 11:52
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
Ajouter un commentaire
Réponse
+0
moins plus
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/javascript/testeur-expressions-reguliere s/
- JS : http://www.toutjavascript.com/service/regexp.php

Bonne chance,
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « Pb php/regex sur le nombre de caractères » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?