probleme regex

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 : probleme regex

par damaskinos » 27 janv. 2009, 21:48

Merci

C'est ce que j'ai fais en faite quand je disais dans mon post précédent qu'il fallait d'abord filtré en brute et appliqué ma regex pour le reste, je parlais de faire quelque chose du genre.

Merci pour tout.
Je marque resolu.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par thehawk » 27 janv. 2009, 20:12

Une solution de brute pourquoi ne pas faire un explode("-" , $maVar); et de compter le dernier résultat
et en déduire si cela est bon ou non.

Sinon je ne vois pas avec Regex.

par damaskinos » 27 janv. 2009, 20:07

Non j'ai bien compris en fait ce que je veux dire c'est avec ca reponse

1-(555)-656-6666
va marché mais


1-(555)-65676666
va aussi marché et dans le 2eme cas il y a trop de chiffre.

Merci.

par thehawk » 27 janv. 2009, 19:16

Je pense que tu as mal interprété la réponse ;)

Il y 7 - 9 espace (Espace spatial "conteneur") : composé de : chiffre ou tiré (Pas d'espace dans le sene "Barre d'espace".

par damaskinos » 27 janv. 2009, 18:20

MErci encore pour ta reponse.

LEs parentheses sont belles et bien echappées dans mon code, j ai mal transcris dans le post. desolé.

Pour ce qui est de ta solution, j'avais déjà essayé ca mais elle me convient pas parce la je peux du coup mettre comme tu dis 7 à 9 espaces, tirets ou chiffres
alors qu'il faut absolument 7 chiffre et s'il y ait des espaces ou des tirets ou des points je m'en fous. Bon bien grand mot 55..---55 devrait pas arriver non plus. Je croyais que c'etais possible de regler ca avec les regex mais je crois il va falloir un peu de filtrage avant avec du code avant d'appliquer ma regex du debut.

Qu'est-ce que tu en penses.
Merci encore

par Ryle » 27 janv. 2009, 18:03

Y a quelques petites choses qui ne vont pas...

- Les parenthèses, dans une expression régulière, servent à capturer des données. Si tu dois utiliser les caractères '(' ou ')' dans ton expression, il faut alors les échapper en les faisant préceder d'un antislash : '\(' ou '\)' , ainsi php considère qu'il s'agit de simple caractères.

- Le nombre de caractères : si tu mets des tirets ou des espaces en plus de tes 7 chiffres, tu ne peux pas conserver que 7 caractères ({7}). Il te faut donc soit étendre le nombre de caractères proposer (par exemple entre 7 et 9 : {7,9}) soit revoir le format de ton expression pour tester la présence potentiel de ces éléments à des endroits spécifiques...

Voici un exemple de pattern qui correspond aux exemples que tu as donné ci-dessus..
/^[0-9]{1}[ -]?\([0-9]{3}\)[ -]?[0-9 -]{7,9}$/
^ : la chaine doit commencer par
[0-9]{1} : un chiffre
[ -]? : suivi d'un espace, d'un tiret ou pas
\([0-9]{3}\) : suivi de 3 chiffres entre parenthèses
[ -]? : suivi d'un espace, d'un tiret ou pas
[0-9 -]{7,9} : suivi de 7 à 9 espaces, tirets ou chiffres
$ : et doit terminer la chaine.

par damaskinos » 27 janv. 2009, 17:17

Merci pour ta réponse.

Mais j'y arrive toujours pas.

J'ai essaye ca:
/^[0-9]{1}[-. ]?([0-9]{3})[-. ]?[-. 0-9]{7}$/
ca marche pas et
/^[0-9]{1}[-. ]?([0-9]{3})[-. ]?[-. |0-9]{7}$/
marche pas plus.

Merci d'avance pour votre aide.

par Ryle » 27 janv. 2009, 09:21

Pour ajouter un tiret dans une clase d'expression régulière, celui-ci doit être placé à la fin pour ne pas être confondu avec un interval entre deux caractères :)

Tu peux aussi utiliser le pipe | (altgr+6) pour proposer un caractère ou un autre : [a|b] correspond à soit "a", soit "b" :)

probleme regex

par damaskinos » 27 janv. 2009, 01:00

Bonjour

j'ai une regex qui fonctionne à moité. J'essaye de validé des numéros du genre
1-(555)-6566666
Pour celui-là ca marche mais j'aimerais aussi pouvoir accepter celui-ci
1-(555)-656-7777
1-(555)-65-67-777
1-(555)-6567-777
1-(555)-65 67 777
Voilà ce que j'ai fais:
/^[0-9]{1}[-. ]?\([0-9]{3}\)[-. ]?[0-9]{7}$/
.

c'est la dernière partie de la regex je n'arrive pas à modifier pour qu'il accepte les tirets ou les espaces à n'importe qu'elle endroit dans les 7 derniers chiffres.

Merci d'avance pour vos reponses.
Djibril