2010-05-28 8 views
3

Je souhaite valider le nom de connexion avec les caractères spéciaux [email protected]#S%^*()+_-?/<>:"';. espace en utilisant une expression régulière en rubis sur des rails. Ces caractères spéciaux ne devraient pas être acceptables. Quel est le code pour ça?validation des caractères spéciaux

+2

* "Quel est le code pour cela?" * Pourquoi ne pas poster vos efforts ici afin que d'autres peuvent signaler la erreur en elle: bien meilleure façon d'apprendre des choses, IMO. –

+2

Je suis un Nuby, mais vous devriez être des caractères légaux de liste blanche au lieu de bloquer les caractères spéciaux. Que faire si quelqu'un utilise ¨, ou §, ou ½? –

Répondre

0

Tout d'abord, je recommande d'utiliser une gemme pour la connexion, comme authlogic.

La gem peut être configurée pour valider l'adresse e-mail. Vous bénéficiez également de l'avantage de ne pas avoir à s'inquiéter de l'authentification de vos utilisateurs, etc.

Très facile à travailler avec.

1

Eh bien, je ne sais pas, mais c'est des rails ce que le regex ressemblerait dans toutes les autres langues que je connais:

^[^[email protected]#\$%\^\*\(\)\+_\-\?/\<\>:"';\. ]$ 
1

Le regex /^\w*$/ permet d'utiliser uniquement des lettres, des chiffres et un trait de soulignement.

De plus, vous avez un antisèche et un éditeur live regexp rubis sur http://rubular.com

3

Vous avez reçu regexps dans ce fil qui répond à votre question. Vous faites une approche de liste noire (en bloquant les personnages que vous ne voulez pas) mais est-ce vraiment ce qu'il y a de mieux? Je vois que vous n'avez pas couvert & ou ~, et il y a beaucoup d'autres caractères spéciaux qui sont probablement encore manquants.

Si vous essayez de bloquer des caractères spéciaux, je suggérerais une approche de liste blanche, selon la suggestion d'expression rationnelle de pablorc. C'est beaucoup plus large et ne liste que ce que vous voulez autoriser .... caractères non spéciaux: seulement des mots, des traits de soulignement et des nombres.

Je suis allé de l'avant et j'ai créé une méthode pour vous qui utilise une approche de liste blanche en utilisant cette expression rationnelle.

def valid_login?(str) 
    return true if (/^\w*$/.match(str)) 
    return false 
end 

Cette méthode, valid_login ?, retourne vrai que si la chaîne contient des lettres, des chiffres ou soulignent, de sorte que tous vos caractères spéciaux (ainsi que tout autre que vous avez omis qui ne répondent pas à ces exigences), sont détectés en toute sécurité.

Utilisation:

> valid_login?("testy") 
    true 
> valid_login?("a b") 
    false 
> valid_login?("a'") 
    false 
7

validates_format_of :username, :with => /^[A-Za-z0-9.&]*\z/

ne fonctionnera

0
validates_format_of :username, :with => /^[^[email protected]#S%\^\*()\+_-\?\/<>:\"';]+$/