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

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 : Petite galère avec les expressions régulières

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

par stealth35 » 23 juin 2010, 14:34

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:

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

par stealth35 » 23 juin 2010, 10:50

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

par AoSiX » 23 juin 2010, 10:45

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

par stealth35 » 23 juin 2010, 10:44

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

par stealth35 » 23 juin 2010, 10:43

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

par AoSiX » 23 juin 2010, 10:42

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

par Greg » 23 juin 2010, 10:32

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

par stealth35 » 23 juin 2010, 10:27

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

par AoSiX » 23 juin 2010, 10:23

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

par Greg » 23 juin 2010, 10:21

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

par Greg » 23 juin 2010, 10:17

Merci beaucoup !

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

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

par AoSiX » 23 juin 2010, 10:14

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

par AoSiX » 23 juin 2010, 10:03

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

par stealth35 » 23 juin 2010, 10:02

hello,
je te conseil cette outils http://gskinner.com/RegExr/ pour créer tes regexp :wink:

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

par Greg » 23 juin 2010, 09:52

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 !