Je ne suis pas un ninja regex. J'ai peaufiné cela pendant une heure, et je suis sûr que quelqu'un sur SO peut le faire plus efficacement.Regex pour nom d'utilisateur avec des règles très spécifiques
Ceci est une regex pour un nom d'utilisateur avec des exigences légèrement particulières (pour accommoder les noms d'utilisateur hérités).
Règles:
- Durée: 24 charaters maximale, 3 caractères minimum
- ne doit pas commencer ou se terminer par un espace
- un nombre quelconque de ce qui suit (jusqu'au champ max longueur de 24) :
- 0-9
- AZ
- az
- . (Dot)
- '' (espace)
- zéro ou un de chaque de jeu suivant:
- @ (at)
- _ (underscore)
- - (trait d'union)
- '(apostrophy)
est ici wh à ce jour j'ai:
^[^ ](?=[A-Za-z0-9. @_\-]{1,24}$)[a-zA-Z0-9_. ]*\.?[a-zA-Z0-9_]*[^ ]$
mais ce n'est pas tout à fait exact. Je ne sais pas comment échapper le '(apostrophe)
aussi, devrais-je utiliser un autre lookahead pour les caractères autorisés zéro ou une fois?
Merci.
Mise à jour: Notez que la cible est le .Net 4.0 bibliothèques avec C# regex
Vous devriez vraiment indiquer dans quelle langue vous implémentez ceci, les fonctionnalités des moteurs regex sont si différentes. Aussi, voulez-vous dire «zéro ou un caractère de la classe' @ _- ''» ou «zéro ou un de chacun des caractères' @ ',' _', '-',' '' "? (La portée de 'any' est ambiguë). – LHMathies
@LHMathies, Oui je vois l'ambiguïté maintenant. Je voulais dire "zéro ou un de chacun de l'ensemble [@ _- ']" alors "a _ _-'" est valide, mais "abc @@" ne l'est pas. Merci de votre attention. – DanO