2017-03-25 1 views
2

Je suis assez nouveau dans ce monde. Frappé avec une petite tâche concernant Regex. Avant de poster une nouvelle question je suis passé par quelques réponses qui sont en mesure de comprendre, mais je ne pouvais pas trouver la solution à mon problème Appréciez votre aide à ce sujet.Expression JS pour correspondre à un nom d'utilisateur avec des caractères spéciaux spécifiques et pas d'espaces consécutifs

Mon scénario est le suivant:

la base de validation sur les critères ci-dessous Nom d'utilisateur

1- Le premier caractère doit être un zA-Z0-9_ @ (soit de deux caractères spéciaux (_ @) ou alphanumérique 2 - Le reste peut être n'importe quelle lettre, n'importe quel nombre et - @ _ (soit l'un des trois caractères spéciaux et l'autre alphanumérique).

3 - MAIS pas d'espaces consécutifs entre les mots.

4- Taille maximale doit être de 30 caractères

mon nom d'utilisateur peut contenir plusieurs mots séparés par un simple space..for le premier mot uniquement _ @ alphanumériques sont autorisés et pour le second mot peut contenir partir _- @ aphanumeric

besoin d'ignorer les espaces en fin de chaîne à la fin du nom d'utilisateur

Exemples: @test, _test, @test123, 123 @, le test _- ​​@, le test -test1, @test -_ @ test etc ...

apprécie votre aide sur ce ..

Merci Arjun

Répondre

0

Ici, vous allez:

^(?!.*[ ]{2,})[\[email protected]][[email protected]\w]{0,29}$ 

Voyez-le working on regex101.com.
La condition 3 est ambigouus bien que vous n'autorisez pas les espaces de toute façon. \w est un raccourci pour [a-zA-Z_], (?!...) est appelé un neg. lookahead.


VENTILEES ce dit:

^    # start of string 
(?!.*[ ]{2,}) # neg. lookahead, no consecutive spaces 
[\[email protected]]   # condition 1 
[[email protected]\w]{0,29} # condition 2 and 4 
$    # end of string 
+0

Hey Jan, Merci pour votre réponse rapide .. bi mai didnt a bien posé ma question ... votre solution fonctionne parfaitement pour le seul word..But mon nom d'utilisateur peut contenir plusieurs mots séparés par espace unique ... pour le premier mot seulement _ @ alphanumérique sont autorisés et pour le second mot il peut contenir _- @ aphanumeric .. Exemples- _test -test, test -_test, test _test123 etc – Arjun

0

Cela pourrait fonctionner ^(?=.{1,30}$)(?!.*[ ]{2})[[email protected]]+(?:[ ][[email protected]]+)*$

Note - le chèque sans espaces consécutifs (?! .* [ ]{2}) est pas vraiment
nécessaire puisque le corps regex ne permet qu'un seul espace entre les mots.
Il est laissé à la postérité, sortez-le si vous le souhaitez.

Expliqué

^      # BOS 
(?= .{1,30} $)   # Min 1 character, max 30 
(?! .* [ ]{2})   # No consecutive spaces (not really necessary here) 
[[email protected]]+   # First word only 
(?:      # Optional other words 
     [ ] 
     [[email protected]]+ 
)* 
$      # EOS