Forum Programmation.autre RegEx militant pour des noms d'utilisateur décents

Posté par .
Tags : aucun
1
3
avr.
2010
Bonjour à tous,
Tout juste débarqué sur linuxfr.org, site que j'admire beaucoup et dont j'ai beaucoup entendu parler, je viens vous demander conseil au sujet d'une expression rationnelle dont je voudrais me servir pour obliger les noms des utilisateurs (joueurs) de mon site web (mmorpg par navigateur, non, ne m'égorgez pas, je développe un jeu mais j'aime quand même Linux, hein) à :
- contenir entre 3 et 16 caractères ;
- commencer par une majuscule ;
- ne contenir aucun caractère spécial autre que le tiret simple - ;
- ne contenir aucun chiffre ;
- ne contenir de majuscules autre part qu'au début qu'après soit une espace, soit un tiret, soit une apostrophe.

C'est en réalité le dernier point qui me pose surtout problème ; je m'en remets donc à votre expérience et à votre ingéniosité.

Merci d'avance à tous,
Ululo
  • # A peu près

    Posté par . Évalué à 3.

    D'après ce que j'ai compris ça donnerai ça: ^[A-Z]([a-z\-]|[ '\-][A-Z])+$
    Il manque la restriction de taille mais la règle qui précise qu'une majuscule peut suivre un espace (etc) empêche de le faire simplement.

    Mais avec un strlen ou équivalent aucun soucis.
    • [^] # Re: A peu près

      Posté par . Évalué à 2.

      Je n'ai pas le temps d'essayer, mais pour la longueur, une simple modification comme ça ne suffirait-elle pas?


      ^[A-Z]([a-z\-]|[ '\-][A-Z]){2,12}$
      • [^] # Re: A peu près

        Posté par . Évalué à 2.

        Pardon, j'ai lu un peu vite. Bien sur je voulais dire:

        ^[A-Z]([a-z\-]|[ '\-][A-Z]){2,15}$
        • [^] # Re: A peu près

          Posté par . Évalué à 1.

          Non, parce que la sous-expression [ '\-][A-Z] fait deux caractères et peut être répétée jusqu'à 15 fois, soit 31 caractères pour l'expression totale. Un pseudo tel quel « A-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p » serait donc valide alors qu'il est deux fois trop long.
      • [^] # Re: A peu près

        Posté par . Évalué à 2.

        Oui, j'ai répondu sans trop réfléchir. Toutes mes excuses :)
    • [^] # Re: A peu près

      Posté par . Évalué à 2.

      Excellent !
      Ça marche !
      Merci beaucoup, beaucoup, beaucoup.

      Pour un premier contact avec la communauté linuxfr.org, c'est sûr que ça fait chaud au cœur.

      SteakyCobra le {2,15} ne peut fonctionner puisque ([a-z\-]|[ '\-][A-Z]) autorise soit un, soit deux caractères.

      J'utilise donc strlen qui fonctionne très bien, si je voulais tout intégrer à la RegEx c'était pour l'esthétique.

      Bonne soirée à tous,
      Ululo
  • # Un p'tit problème dans l'énoncé...

    Posté par . Évalué à 2.

    Les deux conditions ci-dessous entrent en conflit...

    - ne contenir aucun caractère spécial autre que le tiret simple - ;
    - ne contenir de majuscules autre part qu'au début qu'après soit une espace, soit un tiret, soit une apostrophe.

    Non?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.