2009-09-21 3 views
0

J'ai un asp: textbox prenant un nom d'utilisateur qui fait partie d'un formulaire d'inscription pour un nouveau compte d'utilisateur.regex ne détecte pas d'espace dans la zone de texte du nom d'utilisateur

Évidemment je ne veux pas que l'utilisateur s'inscrive en utilisant un espace comme nom ainsi j'ai cette expression régulière qui devrait garder l'entrée valide aux caractères ASCII entre 3 et 16 dans la longueur sans les ESPACES.

mais les espaces non ne fonctionnent pas dans la pratique. cela fonctionne dans les éditeurs et vérificateurs Regex mais pas ma page aspx.

Des suggestions?

 
^([[email protected]#$%^&*()-_=+;:'"|~`<>?/{}]{3,16})$|\s 

merci beaucoup

+0

C'est l'expression, où est le code? Si l'expression est correcte, il s'ensuit que le code doit être faux. Ou peut-être le compilateur, mais ne comptez pas dessus. –

+0

C'est juste un lié ​​à une boîte de texte – David

Répondre

2

Il semble que votre avoir du mal à comprendre ce que DTB essaie de dire. Permettez-moi de DECOMPOSENT la regex pour vous et vous verrez ce qu'il dit:

^ - matches the beginning of the input string 
(- begins a capture group, in your case useless and can be removed along with the closing) just before the $ 
[ - begins a group of characters 
[email protected]#$%^&*()-_=+;:'"|~`?/{} - defines all the characters allowed, NOTICE there is no space character so spaces will not count 
] - ends the group of characters 
{3,16} - says that the preceding character(or group of characters in this case) must occur between 3 and 16 times 
) - closes the capture group, again can be removed with the open (
$ - matches the end of the input string 

C'est là votre expression se dérègle ...

| - says that the preceeding match expression (this is the $ which is the end of input) OR the following must be true, but not necessarily both 
\s - matches a space or tab anywhere in the input string 

Donc (si je lis ce correctement) vos états d'expressions rationnelles:

"Je fais correspondre une chaîne si la chaîne commence par des caractères ascii et a entre 3 et 16 caractères avant de trouver la fin de la chaîne ou un espace (tabulation ou espace)."

Pour résoudre ce problème, supprimez le « | \ » s de la fin de votre expression et il suffit d'utiliser les éléments suivants:

^([[email protected]#$%^&*()-_=+;:'"|~`<>?/{}]{3,16})$
+0

Merci pour l'explication, je n'étais pas en colère, il semble il y a un problème avec la façon dont l'expression est utilisée Ma page me permet toujours d'entrer des espaces non détectés, la chaîne est correcte, mais j'ai choisi les espaces avec une instruction if maintenant pour gagner du temps. – David

5
 
^([[email protected]#$%^&*()-_=+;:'"|~`?/{}]{3,16})$|\s

Votre regex actuel dit: « Je correspond à une chaîne si la chaîne est faite de ces caractères et est de 3 à 16 caractères OU si elle contient une caractère d'espace. "

Donc, si vous ne voulez pas qu'il corresponde à des espaces, enlever |\s (à savoir le « ou » opérateur et le motif des espaces) de la regex.

+0

j'en ai besoin pour détecter des espaces bien – David

+4

Votre expression régulière actuelle dit: "Je fais correspondre si la chaîne est faite de ces caractères et de 3 à 16 caractères OU s'il contient un space " – dtb

+0

Ok je suis un novice désolé.un conseil sur la façon de le modifier afin qu'il corresponde aux caractères et est de 3-16 de longueur et ne contient aucun espace? – David

0

Une réponse plus simple serait:

^([^\s]{3,16})$ 

qui signifie « toute chaîne doit se composer de trois à seize répétitions de quoi que ce soit autre que les espaces. »

Cela permettra également d'ajouter des caractères accentués, mais c'est probablement quelque chose que vous devrez accepter de toute façon.

0

est encore plus simple

^\S{3,16}$ 
Questions connexes