Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2006, 17h45   #1
Invité de passage
 
Inscription : mars 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 15
Points : 1
Points : 1
Par défaut Besoin d'aide sur une preg_match!!!!!

Bonjour à tous,
J'aurai besoin de votre aide sur la construction d'une expression régulière.
Je suis dessus depuis plus de 2heures et je n'y arrive pas!!!!

Je suis sur que cela vous semblera trivial.

J'aimerai tester le format d'un prix, du type:
un entier non nul=ok
Un nombre avec 1 ou deux 2 chiffres apres la virgule= ok

Ex: (n=un chiffre)
0->faux
n->Vrai
n,n->Vrai
n,nn->vrai
n,nn...nn->Faux
n...n,nn->vrai

je galère!!!!

Voilà ce que j'ai mais ça merde:
Code :
1
2
 
if (preg_match("!^[0-9]{1,}[,]?]?[0-9]{1,2}$!",$prix)) return true;
le probleme de celui là c'est qu'il n'accepte pas les chiffres du type n, t qu'il accepte les valeurs nulles...


Help please!!!!
j_dron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 19h55   #2
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Et avec:

Code :
1
2
3
4
if (is_numeric(number_format($prix, 2, ',', ' '));
   return true;
else
   return false;
?
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 20h00   #3
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
ou alors (si j'ai bien compris...) le pattern <[1-9][0-9]*|[0-9]+,[0-9]{1,2}>
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 09h39   #4
Invité de passage
 
Inscription : mars 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 15
Points : 1
Points : 1
Merci pour vos réponses, mais ni l'une ni l'autre ne fonctionne bien...
La deuxieme et presque bonne mais le probleme c'est que je peux saisir des chiffre du type:
1,nn...nn
Donc plus de 2 chiffres après la virgule...
j_dron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 09h52   #5
Invité de passage
 
Inscription : mars 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 15
Points : 1
Points : 1
Ayé!
J'ai trouvé, pour ceux que ça interesse:
Code :
 if (preg_match("!^[0-9]{1,2}([,][0-9]{0,2})?$!",$pourcentage)) return true;
A+
j_dron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 10h02   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Légère amélioration :
Code :
'#^[0-9]{1,2}(,[0-9]{0,2})?$#'
Fais attention à la valeur nulle, elle fonctionne avec cette regex. Je te recommande de commencer par un test if(!empty($valeur))
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 11h43   #7
Invité de passage
 
Inscription : mars 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 15
Points : 1
Points : 1
J'ai fait mieux:
Code :
 if (preg_match("!^[1-9]{1}([0-9]{0,1})?([,.][0-9]{0,2})?$!",$pourcentage)) return true;
j_dron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 13h16   #8
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Citation:
Envoyé par j_dron
J'ai fait mieux:
Code :
 if (preg_match("!^[1-9]{1}([0-9]{0,1})?([,.][0-9]{0,2})?$!",$pourcentage)) return true;
tu n'accepte pas les 0,nn de plus il y a des trucs un peu inutiles dans ton pattern ^^
réduit ça donnerait :
!^[1-9][0-9]?([,.][0-9]{0,2})?$!

je pense que :
<^(([1-9][0-9]?)|([0-9]{1,2}[,.][0-9]{1,2}))$>
doit être bon (c'est le même qu'au début mais j'ai modifier des petits trucs ^^
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h44.


 
 
 
 
Partenaires

Hébergement Web