IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Au moins un caractère [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Au moins un caractère
    Salut,

    Je cherche à faire une expression régulière pour un champ N° et adresse dans un formulaire
    je voudrais donc vérifier qu'il y ait AU MOINS un caractères [a-zA-Z].
    Exemple:
    23, 23 , 23 23 -> FAUX
    rue du port, 23 rue du port, 23a, 23 a -> VRAI

    Voila je n'y arrive pas à cause du AU MOINS, si quelqu'un pouvait au moins (ahah) m'éclairer.

    Thx

  2. #2
    Membre averti
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Points : 304
    Points
    304
    Par défaut
    Est-ce que le bout suivant ne suffirait pas ?

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    je le pensais mais apparemment non, mais ce qui m’embête c'est quand je test cette expression dans un testeur d'expression régulière ça a l'air de marcher...
    Mon code n'étant pas en PHP je ne vais pas le mettre ici mais c'est un validateur d'expression basique en ASP, donc je ne vois pas pourquoi ça ne marche pas...

    Si quelqu'un à d'autres idées ...

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    /[0-9a-z]+/i
    ou
    /[0-9\w]+/u

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Je ne comprend pas le slash du début?
    Et le /u veux dire quoi dans ce cas?

    Je test et te tiens au courant

  6. #6
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Le slash (choisi arbitrairement) est un délimiteur (*)
    Délimiteurs
    Lors de l'utilisation des fonctions PCRE, il est nécessaire que le motif soit encadré par des délimiteurs. Un délimiteur peut être n'importe quel caractère alpha-numérique autre qu'un backslash ou qu'un espace.
    Il sert à séparer l'expression elle-même des options (**).

    Le code ci-dessous prend aussi en compte les espaces, virgules, point et tiret.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $str='Immeuble PHP Batiment 5.3, Rue des expressions rationelles';
    if (preg_match('/[\d\w ,.-]+/iu',$str,$res)) echo $res[1];
    Les options utilisées :
    • i (PCRE_CASELESS)
      Effectue une recherche insensible à la casse.
    • u (PCRE8)
      Les chaînes sont traitées comme des chaînes UTF-8.

    (*) Voir Délimiteurs
    (**) Voir Options.

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Ok merci des précisions je vois mieux.

    Par contre \d correspond bien à [0-9] et \w à [a-zA-Z0-9] (avec le i) ?
    Du coup ça donne quelque chose comme [0-9a-zA-Z0-9], c'est normal?

    Par contre ça à l'air de matcher si je mets juste le nombre 23.
    Ça matche si le champ contient nombres OU caractères, ou c'est nombres ET caractères ? Tout ce qu'il y'a dans les crochets ou n'importe quelle expression des crochets?

    Merci d'avance j'essaie de comprendre :p

  8. #8
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par Dol
    Par contre \d correspond bien à [0-9] et \w à [a-zA-Z0-9] (avec le i) ?
    Du coup ça donne quelque chose comme [0-9a-zA-Z0-9], c'est normal ?
    J'y crois pas !
    J'ai toujours cru que \w representait uniquement les caractères de l'alphabet (accentués inclus) ainsi que le caractère _, alors qu'il represente aussi les chiffres.

    Citation Envoyé par Dol
    Par contre ça à l'air de matcher si je mets juste le nombre 23
    Ca devrait le faire avec...
    /[\w ,.\'-]*[a-z][\w ,.\'-]*/iu

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    YES ça marche ça
    J'en était arriver à a peu prés la même expression en entourant un [a-z] de [0-9]*

    Merci bien

  10. #10
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    La RE /[\w ,.\'-]*[a-z][\w ,.\'-]*/iu marche s’il faut seulement vérifier la présence d’au moins une lettre dans une chaîne.

    Mais si tu veux
    faire cette vérification + attraper des données avec des groupes
    d'un seul coup avec une seule RE,
    elle ne suffit plus, puisqu’une fois vérifié le matching de la RE sur toute sa longueur, le moteur de regex est au bout de la chaîne sujet.

    Pour lui permettre de revenir en arrière, il faut utiliser une assertion en avant placée tout à fait en tête de la RE:

    /(?=[\w ,.\'-]*[a-z][\w ,.\'-]*)/iu

    Laisser [\w ,.\'-]* après [a-z] n’a de sens que pour vérifier qu’il n’y a que des caractères de la classe [\w ,.\'-] après la lettre trouvée. Mais donc, cette vérification doit être faite jusqu’à la fin de la chaîne sujette:

    /(?=[\w ,.\'-]*[a-z][\w ,.\'-]*\z)/iu

    On peut ensuite ajouter une RE capturante à la suite de l'assertion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/09/2014, 07h25
  2. Réponses: 6
    Dernier message: 20/04/2011, 16h44
  3. Réponses: 2
    Dernier message: 21/07/2006, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo