Rechercher : dans
Par :

Pb php/regex sur le nombre de caractères

Dernière réponse le 28 jui 2009 à 18:30:54 AmeryCourtz, le 28 jui 2009 à 17:34:41 
 Signaler ce message aux modérateurs

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.
Configuration: Windows Vista
Safari 530.5

Meilleures réponses pour « Pb php/regex sur le nombre de caractères » dans :
PHP - Nettoyer une chaîne de caractères VoirVoici une fonction en PHP qui peut être assez pratique, surtout quand on fait de l'URL Rewriting. Cette fonction permet de transformer les caractères de n'importe quelle chaîne de caractères en chaîne non accentuée, en enlevant les caractères...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...

1

lecube, le 28 jui 2009 à 17:40:19

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
Hope it helps.
Cube

Répondre à lecube

2

Thamior, le 28 jui 2009 à 17:45:55

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-expr­ession-tester.php
- JS : http://quentinc.net/javascript/testeur-expressions-reguliere­ s/
- JS : http://www.toutjavascript.com/service/regexp.php

Bonne chance, Thamior.

Répondre à Thamior

3

AmeryCourtz, le 28 jui 2009 à 17:57:49

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.

Répondre à AmeryCourtz

4

lecube, le 28 jui 2009 à 18:10:08

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 ? Hope it helps.
Cube

Répondre à lecube

5

AmeryCourtz, le 28 jui 2009 à 18:28:15

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

Répondre à AmeryCourtz

6

 AmeryCourtz, le 28 jui 2009 à 18:30:54

C'est bon c'est trouvé, c'était :

$Reg = ("#^[a-zA-Z0-9]{4,6}$#");


Merci encore ^^
et merci Alain_42

Répondre à AmeryCourtz
Collection CommentÇaMarche.net