problème avec regex simple

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème avec regex simple

par Invité » 28 nov. 2008, 13:37

BOn je viens donc de passer en preg_match plutot que ereg, mais toujours pareil, ça ne me retourne pas le résultat attendu
pour répondre à cette remarque : toutes les commandes ne retournent pas les mêmes valeurs.
et toujours pareil, c'est dans le manuel ;)

extrait du manuel ( http://fr3.php.net/ereg ) :
Valeurs de retour

Retourne la longueur de l'occurrence trouvée si une occurrence a été trouvée dans la chaîne string et FALSE dans le cas contraire ou si une erreur est survenue.
extrait du manuel ( http://fr3.php.net/preg_match ) :
Valeurs de retour

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.
on ne fait donc pas le même test selon la commande utilisée.

par VaN » 28 nov. 2008, 13:21

Effectivement, is_numeric() (plus trim() ) marche bien

par jojolapine » 28 nov. 2008, 12:57

Et au pire on a un truc déjà tout fait qui s'appel is_numeric() ;)

par charabia » 28 nov. 2008, 12:40

if(!preg_match("#^[0-9]+$#", $_POST['annonce_zipcode']))
	echo 'Ville';
else
	echo 'CP';

par VaN » 28 nov. 2008, 12:33

BOn je viens donc de passer en preg_match plutot que ereg, mais toujours pareil, ça ne me retourne pas le résultat attendu :
if(preg_match("#^[0-9]+$#", $_POST['annonce_zipcode']) !== false) {
			echo 'CP';
			//$sql .= " AND annonce_zipcode >= '".$_POST['annonce_zipcode']."'";
		}
		else
			echo 'Ville';
Lorsque j'écris un nombre, ça me retourne bien "CP". Mais si j'écris une chaine de lettres, il me retourne également CP, et non Ville.

par Invité » 27 nov. 2008, 21:40

bonsoir,

extrait du manuel ( http://fr3.php.net/ereg ) :
Valeurs de retour

Retourne la longueur de l'occurrence trouvée si une occurrence a été trouvée dans la chaîne string et FALSE dans le cas contraire ou si une erreur est survenue.
donc en reprenant ton code :
if(ereg("^[0-9]+$", $_POST['annonce_zipcode']) !== FALSE) {
            echo 'CP';
            //$sql .= " AND annonce_zipcode >= '".$_POST['annonce_zipcode']."'";
        }
        else
            echo 'Ville'; 

Rq : les fonctions POSIX ( ereg &Co ... ) ne devraient plus être utilisées.
on utilise plutôt les fonctions PCRE ( preg_match, etc ... )
voir http://lumadis.be/regex/tuto_pcre.php ( le top des tutos )

par AB » 27 nov. 2008, 21:38

Utilises preg_match, ereg est déconseillé pour des raisons de performances. Autant prendre de bonnes habitudes.

IL y a un tuto pas mal pour débuter sur le lien suivant http://www.siteduzero.com/tutoriel-3-14 ... e-1-2.html (il contient la réponse à ta question)

problème avec regex simple

par VaN » 27 nov. 2008, 19:38

Bonjour,

je souhaite à savoir si un string est constitué uniquement de chiffre. j'ai donc essayé la regex suivante :
if(ereg("^[0-9]+$", $_POST['annonce_zipcode']) === true) {
			echo 'CP';
			//$sql .= " AND annonce_zipcode >= '".$_POST['annonce_zipcode']."'";
		}
		else
			echo 'Ville';
mais elle me renvoie Ville, même si je tape un nombre. Une erreur ?