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 :

Récupérer un pattern


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut Récupérer un pattern
    Bonjour à tous,

    J'ai un petit problème concernant une regex, j'ai cherché un peu partout mais je n'arrive pas à résoudre mon problème:

    Je souhaiterai forcer une string pouvant contenir un point à ne PAS finir par ce même point (pour un login)?

    Ma regex est la suivante pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexLogin = "(^[a-z]+\.{0,1}[a-z]*[0-9]{0,2}$)"
    Je souhaite valider les logins du type:
    michel, michel2, michel.12, michel.dupont, michel.dupont2, etc.

    Elle marche nickel mais je voudrais pouvoir exclure une demande de login type: "michel." (finissant par un ".")

    PS: Question subsidiaire, serait il plus prudent de remplacer les "[a-z]+" et "[a-z]*" par des "[a-z]{1,24}" et "[a-z]{0,24}" par exemple? (niveau sécurité)
    C'est pas risqué l'utilisation des "+" et "*"? (même si ma BDD limite la taille des champs bien entendu).

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    $regexLogin = "(^[a-z]+\.{0,1}[a-z]*[0-9]{0,2}$)"
    Elle marche nickel mais je voudrais pouvoir exclure une demande de login type: "michel." (finissant par un ".")
    C'est vrai qu'elle, comme telle, permet un point à la fin. Pour l'exclure, vous pouvez ajouter un simple "lookbehind" négatif à la fin (voir dessous).

    ...serait il plus prudent de remplacer les "[a-z]+" et "[a-z]*" par des "[a-z]{1,24}" et "[a-z]{0,24}" par exemple? (niveau sécurité)
    Je ne pense pas qu'il est souhaitable de le faire comme ça. Il dégrade la performance d'une regex sans une nécessité accablante. Je dirais plutôt mettre un "lookahead" négatif au début dans le sens que la longeur du texte plus long qu'un maximum (dit, par exemple, 30 - voir dessous) serait invalidée. Le nombre concret n'a pas d'importance critique pour provisionner un minimum de protection à la bdd.

    En somme, modifiant la regex comme ça pour la completer avec ces deux buts supplémentaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexLogin="/^(?![\s\S]{30,})[a-z]+\.{0,1}[a-z]*[0-9]{0,2}(?<!\.)$/";

Discussions similaires

  1. [ODS] PROC FACTOR : récupérer le tableau Rotated Factor Pattern
    Par Tisoon dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 04/07/2014, 14h12
  2. [RegEx] Quel pattern pour récupérer des tags html
    Par erehcab dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2013, 17h58
  3. récupérer valeur cellule grâce à un pattern ?
    Par frenchlion dans le forum Excel
    Réponses: 2
    Dernier message: 07/03/2012, 18h12
  4. [RegEx] Récupérer tous les patterns
    Par ZCode dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2011, 20h32
  5. Réponses: 6
    Dernier message: 20/07/2007, 16h49

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