11
votes

Valider uniquement les lettres, les chiffres et -

Je voudrais valider mes utilisateurs, afin qu'ils ne puissent utiliser A-Z et - dans leur nom d'utilisateur.

Username should use only letters, numbers, spaces, and .-_@ please.


2 commentaires

C'est ce que j'ai proposé: validateate_format_of: nom d'utilisateur,: avec => / ^ [- A-Z \ D _] + $ /


Lorsque vous avez une réponse qui résout votre problème, vous devez le marquer comme accepté.


5 Réponses :


3
votes

Le [] peut contenir plusieurs "règles" afin que [A-Z0-9] donne des lettres minuscules et des chiffres

Le caractère spécial - doit aller au début de la règle

fait xxx

donne l'effet que vous voulez?


2 commentaires

[-A-ZA-Z0-9 @ _.] <- avec majuscule, juste au cas où.


HMMM Non Désolé, cela me donne que le nom d'utilisateur ne doit utiliser que des lettres, des chiffres, des espaces et.-_ @ S'il vous plaît.



17
votes

Vous devrez peut-être dire que la chaîne entière doit correspondre:

validates_format_of :username, :with => /^[-a-z]+$/


6 commentaires

convenu mais comme / ^ [- a-z] $ / i pour l'insensibilité de l'affaire


Vous retourne toujours invalide: /


Testez-le dans IRB .. re = / ^ [- A-Z] $ / i; "foo" = ~ re


Il doit être / ^ [- a-z] + $ / (avec un i après la seconde barre oblique si vous le souhaitez en cas d'insensibilité de cas). Sans A +, vous dites que cela doit être exactement un caractère long.


^ et $ correspondent aux débuts et fin des lignes. Pour s'assurer qu'aucune nouvelle ligne utilise \ a \ z qui correspondent au début et à la fin de la chaîne.


@Canceylan, vous devriez juste être capable d'avoir un espace après la Z.



0
votes

Changer simplement l'expression régulière pour correspondre à tous les caractères que vos états de spécification ( \ w code> couvrent tous les caractères alphanumériques - lettres et chiffres - et un soulignement).

validates_format_of :username, :with => /[\w \.\-@]+/


2 commentaires

Votre exemple est assez proche mais l'utilisateur peut toujours utiliser. et des espaces. mon ....... Nouvel utilisateur


Il n'y a pas de limite ici pour empêcher la correspondance des chaînes plus longues. Cela correspond à n'importe quelle chaîne contenant au moins un des caractères correspondants.



1
votes
validates_format_of :username, :with => /^[\w\-@]*$/
Note the *, which means '0 or more'

1 commentaires

Même problème ... des espaces et. est toujours autorisé: /



11
votes

solution plus complexe mais réutilisable et avec une messagerie erronée à grain fin davantage.

validateur personnalisé:

app / validateurs / ustiname_convention_validator.rb xxx

(remarquez qu'il autorise ". - _ 'et n'autorise pas non ASCII, à des fins de complétude)

app / modèles / user.rb xxx


1 commentaires

Belle réponse - ça fait le mile supplémentaire.