2010-05-17 5 views
1

Je me bats avec mon regex. Je veux permettre que des lettres et des chiffres et un point dans un nom d'utilisateur et de 2 à 20 caractères de long je pensais que quelque chose comme çaC# Question Regex: seulement des lettres, des chiffres et un point (2 à 20 caractères) autorisés

[0-9a-zA-Z] {} 2,20

mais alors 21 caractères est également ok, et ce n'est pas ce que je veux

+2

Je pense que vous devez être un peu plus explicite. Je doute que vous vouliez un nom d'utilisateur qui se compose de tous les points. Je pense que ce serait plus comme 'username' ou' user.name' sont autorisés, mais 'user.',' .user', et '......' ne sont pas autorisés. – tvanfosson

+1

Je remarque qu'il y a des milliers de lettres que vous excluez. Est-ce intentionnel? –

+0

@tvanfosson Eh bien, c'est la fonctionnalité d'administration, donc il y aura un peu de réflexion de l'utilisateur aussi, mais vous avez raison, mon algorithme ne limite pas cela – Michel

Répondre

9

Je vous suggère de faire deux contrôles - une longueur et un pour le contenu en fonction de la fait que vous voulez probablement seulement un point dans le nom, plutôt que n'importe quel nombre de points. Je suppose que les noms comme username et user.name sont les seuls formats autorisés.

Cela devrait obtenir le contenu (mais permet souligne aussi):

^\w+(\.\w+)?$ 

Si vous ne voulez pas underscores, vous pouvez ensuite utiliser [0-9a-zA-Z]+ en place de \w+. Pour expliquer, il correspondra à toute chaîne constituée d'un ou de plusieurs caractères, suivie exactement par 0 ou 1 d'un point suivi d'un ou plusieurs caractères. Il doit également correspondre au début et à la fin de la chaîne, c'est-à-dire qu'aucun autre caractère n'est autorisé dans la chaîne.

Ensuite, vous avez seulement besoin d'obtenir la longueur avec un simple contrôle de longueur.

+0

très agréable! oui, le point est un peu difficile. ......... est probablement mauvais, mais jpvan.der.bilt sera probablement correct – Michel

+1

@Michel - alors vous pouvez changer '(\. \ w +)?' '(\. \ w +) * 'accepter zéro ou plus au lieu de zéro ou un. – tvanfosson

+0

A travaillé! Merci. – Michel

6
^[0-9a-zA-Z\.]{2,20}$ 
+2

Je soupçonne que ........... ......... 'n'est pas autorisé. – tvanfosson

+0

ah, le début et la fin, merci pour ce – Michel

6

Essayez ^[\w\.]{2,20}$ à la place.

2

Vous devez utiliser début et la fin de la chaîne (^ et $), et échapper à la .:

^[0-9a-zA-Z\.]{2,20}$ 
Questions connexes