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 :

Autoriser lettres et tirets mais pas de tiret au début [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut Autoriser lettres et tirets mais pas de tiret au début
    Bonjour,
    je débute en regex.
    J'ai lu plein de tutos sur ces dernières mais j'avoue m'y perdre à force.

    Voici ce que je voudrais faire:
    afficher une erreur
    - si la variable $nom ne commence pas par une lettre
    ou
    - si la variable $nom contient autre chose que des lettres (et quelques accentuées) ou tiret(-).

    J'ai réussi(enfin je pense avoir testé toutes les solutions) en faisant deux REGEX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match("#[^a-zéèàùûêâôë-]#i", $nom ) || preg_match("#^[^a-zéèàùûêâôë]#i", $nom ))
    Je me demande s'il est possible de tout réunir dans la même expression.

    Merci d'avance pour vos réponses..

    EDIT: il faudrait aussi que les espaces soit autorisés.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 351
    Billets dans le blog
    17
    Par défaut
    Autrement dit :
    - La chaîne doit commencer par une lettre
    - Cette lettre peut être éventuellement suivie par d'autres lettres, tirets ou blancs

    Je dirais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexp = '/^[a-z]{1}[a-z -]*$/' ;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut
    Merci, ça fonctionne à merveille,
    je vais analyser un peu mieux car je ne pige pas tout

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 351
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 351
    Billets dans le blog
    17
    Par défaut
    Décomposition de l'expression /^[a-z]{1}[a-z -]*$/

    /^ : le sujet doit commencer par...
    [a-z]{1} : une lettre
    [a-z -]* : devant être suivie par 0 à n lettres, blancs ou tirets
    $/ : et c'est tout (sans le $ n'importe quoi pourrait suivre)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mars 2009
    Messages : 95
    Par défaut
    Merci de cette décomposition.

    Par contre j'ai donc ajouter "i" à la fin pour prendre en compte les majuscules.
    Mais il faudrait pas (j'ai omis de l'inscrire avant) que l'on puisse finir par - '.
    Et que j'autorise quand même les caractères accentués

    Je m'y remets.

    EDIT: j'en suis là :
    $regexp = '/^[a-zéèàùûêâôë]{1}[a-zéèàùûêâôë \'-]*$/i';
    reste encore la terminaison à gérer.

  6. #6
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    pour gérer la fin tu peux refaire la même chose que pour le 1er caractère et donc tu obtiens quelque chose comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexp = '/^[a-zéèàùûêâôë][a-zéèàùûêâôë \'-]*[a-zéèàùûêâôë]$/i';

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2009, 20h00
  2. script de verification mail ne reconnait pas les tiret
    Par anca2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/01/2009, 23h35
  3. Autoriser copie de fichier mais pas suppression
    Par Devether dans le forum Sécurité
    Réponses: 8
    Dernier message: 13/12/2007, 11h11
  4. Réponses: 3
    Dernier message: 05/03/2007, 11h13
  5. Réponses: 2
    Dernier message: 11/07/2006, 13h01

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