Page 1 sur 1

Petite galère avec les expressions régulières

Posté : 23 juin 2010, 09:52
par Greg
Bonjour,

J'ai actuellement un petit problème avec les expressions régulières ... j'ai toujours su faire sans, mais il faut bien s'y mettre ! ;-)
Bref, j'ai un champ de formulaire dans lequel l'utilisateur peut entrer des numéros de commande, séparés par des virgules, pour faire une recherche.

Je souhaite donc vérifier que le contenu de mon champ ne soit composé que de chiffres, de virgules, et par soucis de commodité, d'espaces.
J'ai essayé différentes choses au niveau de mon masques, mais je ne m'en sors vraiment pas.

Merci !

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:02
par stealth35
hello,
je te conseil cette outils http://gskinner.com/RegExr/ pour créer tes regexp :wink:

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:03
par AoSiX
Je tente ma chance, sans convictions, je suis assez mauvais pour ça ^^

Code : Tout sélectionner

([0-9,\s]+)
Je traduit par

Code : Tout sélectionner

[ 0-9 -> chiffres , -> , \s -> espace ] + -> au moins une de ces choses
EDIT: tésté sur le site de stealth35 et approuvé ! :)

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:14
par AoSiX
Histoire de pousser le vice plus loin, comment faire en sorte qu'on ne puisse avoir qu'une seule virgule consécutive, et un seul espace consécutif ?

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:17
par Greg
Merci beaucoup !

Excellent ce site, il va vite se retrouver dans mes favoris !!!

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:21
par Greg
Ah zut, j'ai un autre petit soucis : autant ça marche si je ne saisis que des caractères interdit, autant quand je mélange des numéros de commande valides et des caractères interdits, ça passe.
Est-ce qu'on peut indiquer dans le masque qu'on ne veut QUE ces caractères autorisés ?

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:23
par AoSiX
C'est l'essence même des regex nan :?: :shock:

Pour ma part, celui que je t'ai filé marche sur le site, mais bon, c'est pas mon fort donc je laisse une personne plus compétente en juger ;)

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:27
par stealth35
Je tente ma chance, sans convictions, je suis assez mauvais pour ça ^^

Code : Tout sélectionner

([0-9,\s]+)
Je traduit par

Code : Tout sélectionner

[ 0-9 -> chiffres , -> , \s -> espace ] + -> au moins une de ces choses
EDIT: tésté sur le site de stealth35 et approuvé ! :)
oui mais du coup ca vérifie uniquement les caratere autorisé et non pas l'intégrité des données, faire : ,,,, 8,8,8,,,,,, ,,, pour lui c'est ok

d'où ta question suivante :wink:
Histoire de pousser le vice plus loin, comment faire en sorte qu'on ne puisse avoir qu'une seule virgule consécutive, et un seul espace consécutif ?
comme ca :wink:

Code : Tout sélectionner

(\d+)(?:,\s)?

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:32
par Greg
Elle m'a l'air ésotérique la p'tite dernière. Tu pourrais m'expliquer son fonctionnement ?

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:42
par AoSiX

Code : Tout sélectionner

(\d+)(?:,\s)?
Mais là tu obliges à faire une suite 'virgule espace', moi je cherchais à faire en sorte que
-'virgule'
-'espace virgule'
-'virgule espace'
-'espace virgule espace'
marchent.

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:43
par stealth35
Elle m'a l'air ésotérique la p'tite dernière. Tu pourrais m'expliquer son fonctionnement ?
c'est pas bon pour ce que tu veux faire, la ca récupèrerai tout les nombres qui sont suivie d'une virgules et d'un espace ou de la fin

(\d+) : groupe un chiffre ou plusieur

(?:,\s)? :
(?:) :c'est pour faire un groupe non capturant
,\s : virgule suivie d'un espace
? : pour dire que le groupe existe éventuellement

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:44
par stealth35

Code : Tout sélectionner

(\d+)(?:,\s)?
Mais là tu obliges à faire une suite 'virgule espace', moi je cherchais à faire en sorte que
-'virgule'
-'espace virgule'
-'virgule espace'
-'espace virgule espace'
marchent.
oui, c'est que j'ai mis plus haut :wink:
ca deviens plus compliquer après :wink:

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:45
par AoSiX
Je suis arrivé à

Code : Tout sélectionner

(\d+)(?:\s)?(?:,)?(?:\s)?
Comme cela, on capture par les séparateurs, et on a plus de liberté !

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 10:50
par stealth35
Je suis arrivé à

Code : Tout sélectionner

(\d+)(?:\s)?(?:,)?(?:\s)?
Comme cela, on capture par les séparateurs, et on a plus de liberté !
tu y'est presque :wink: par contre pas besion de faire le non capture pour la virgule :wink:

Re: Petite galère avec les expressions régulières

Posté : 23 juin 2010, 14:34
par stealth35
je mets une solution parce que c'est pas un cas très simple
$str = '8 , 8, 5';
$reg = '/^(?:\d+(?:(?:\s*,\s*)(?!$))?)+$/';
	
var_dump(preg_match($reg, $str));
en supposant que

,8 , 8, 5 : n'est pas valide
8 , 8, 5, : n'est pas valide

pour ^(?:\d+(?:(?:\s*,\s*)(?!$))?)+$

on va chercher toutes les chaines qui commencent un nombre qui est éventuellement précédé par 0 ou plusieurs espace suivis d'une virgule suivis de 0 ou plusieurs espace mais pas suivis par la fin de chaine

on aurai pu aussi pousser le vice en autorisant d'autre séparateur :wink: