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

  1. #1
    Membre régulier
    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
    Points : 81
    Points
    81
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    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 régulier
    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
    Points : 81
    Points
    81
    Par défaut
    Merci, ça fonctionne à merveille,
    je vais analyser un peu mieux car je ne pige pas tout

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    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 régulier
    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
    Points : 81
    Points
    81
    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 chevronné 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
    Points : 1 895
    Points
    1 895
    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';

  7. #7
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    En interdisant le tiret en fin de chaine ca doit aussi marcher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $regexp = '/^[a-zéèàùûêâôë]{1}[a-zéèàùûêâôë \'-]*[^-]$/i';

  8. #8
    Membre régulier
    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
    Points : 81
    Points
    81
    Par défaut

    merci à tous !!!
    J'étais bien sur cette piste mais j'avais omis l' * .

    Par contre j'ai adopté la solution de nosferapti car avec la solution de blobus, le mot peut se terminer par des lettres ou autres caractères (il aurait fallu que j'ajoute tous ce qui est interdit).

    Moi je voulais que cela finisse forcément par une lettre donc au final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexp = '/^[a-zéèàùûêâôë]{1}[a-zéèàùûêâôë \'-]*[a-zéèàùûêâôë]$/i';
    /^[a-zéèàùûêâôë]{1} doit commencer par une lettre ou caractères accentués cités.
    [a-zéèàùûêâôë \'-]* doit être suivies des lettres ou caractères cités.
    [a-zéèàùûêâôë]$ doit finir par une lettre ou caractères accentués cités.

    J'ai un peu (beaucoup de mal) avec cette fameuse *.

    En tout cas ça fonctionne......

    Re merci à tous.

+ 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