2010-11-13 27 views
0

J'essaie de trouver une regex pour limiter ce qu'une personne peut utiliser pour un nom d'utilisateur sur mon site. Je n'ai pas besoin de le vérifier pour voir combien il y a de caractères, car une autre validation le fait. Fondamentalement, tout ce dont j'ai besoin pour le faire est de m'assurer qu'il permet: les lettres (majuscules et minuscules), les tirets et les traits de soulignement.nom d'utilisateur regex dans les rails

je suis tombé sur ceci:/^ [- a-z] + $/i

Mais il ne semble pas permettre à un nombre.

Qu'est-ce qui me manque?

+3

http://www.rubular.com/ est un excellent site pour tester votre regex. – rwilliams

+0

C'est regex vraiment basique. Ce que vous avez posté inclut 'a-z'; que pensez-vous que vous pourriez ajouter pour inclure les chiffres de 0 à 9? –

+0

Eh bien, je m'excuse, j'ai du mal à trouver de bonnes ressources regex rails sur le web. Je pense quelque chose comme ceci:^[- a-z] + [- 0-9] $ – goddamnyouryan

Répondre

3

Votre expression régulière contient une classe de caractères [-a-z] qui permet aux personnages - (tableau de bord) et a par z. Afin d'élargir la gamme de caractères autorisés par cette classe de caractères, vous devrez ajouter plus de caractères dans le [].

Veuillez consulter Character Classes or Character Sets pour plus d'informations et d'exemples.

5

Le regex que vous cherchez est

/\A[a-z0-9\-_]+\z/i 

Signification un ou plusieurs caractères de plage az, 0-9 gamme, - (doit être échappé avec une barre oblique inverse) et _, insensible à la casse (la i Qualifier) ​​

+0

Juste pour clarifier: le trait d'union n'a pas * nécessairement * besoin d'être échappé. Vous pouvez aussi le mettre dans un endroit où il est considéré comme "sans signification" (impossible de créer une plage) comme la première ou la dernière lettre de la classe de caractères (comme dans l'expression rationnelle d'origine de l'OP). – eldarerathis

+0

Correct. Il doit être échappé dans cet arrangement particulier. – Thilo

4

Utilisez

/\A[\w-]+\z$/ 

\w est un raccourci pour les lettres, les chiffres et soulignement. Correspond au début de la chaîne \z correspond à la fin de la chaîne. Ces jetons sont appelés anchors, et Ruby est un peu spécial à leur égard: La plupart des moteurs regex utilisent ^ et $ comme ancres de début/fin de chaîne par défaut, alors que dans Ruby ils peuvent également correspondre au début/à la fin des lignes (ce qui compte si vous travaillez avec des chaînes multilignes). Par conséquent, il est plus sûr (comme l'a souligné @JustMichael) d'utiliser \A et \z parce qu'il n'y a pas une telle ambiguïté.

+1

Je pense qu'il est plus sûr d'utiliser/\ A [\ w -] + \ z/à la place – JustMichael