2010-05-28 99 views
3

我想验证登录名和特殊字符[email protected]#S%^*()+_-?/<>:"';。在轨道上使用红宝石中的正则表达式的空间。这些特殊字符不应该被接受。这是什么代码?验证特殊字符

+2

* “是什么的代码?” *为什么不能在这里发表您的努力,使其他可以点出错误:更好的学习方式,IMO。 – 2010-05-28 14:22:35

+2

我是Nuby,但您应该将白名单合法字符而不是阻止特殊字符。如果有人使用¨或§或½,该怎么办? – 2010-05-28 14:23:40

回答

0

首先,我会建议使用登录宝石,如authlogic

可以将gem配置为验证电子邮件地址。您还可以获得无需担心验证用户身份的好处等。

非常容易使用的宝石。

1

好吧,我不知道轨但这是正则表达式是什么样子的,我知道每一个其他语言:

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

正则表达式/^\w*$/允许使用字母,数字和下划线一个。

而且,你有一个cheatsheet文件,并在此线程回答您的具体问题上http://rubular.com

3

你已经收到正则表达式的现场红宝石正则表达式编辑器。你正在做一个黑名单的方法(阻止你不想要的角色),但这真的是最好的吗?我看你没有覆盖&或〜,还有很多其他的特殊字符可能仍然丢失。

如果你想阻止特殊字符,我建议按照pablorc的regexp建议采用白名单方法。它更广泛,只列出你想要允许的内容....非特殊字符:只有单词,下划线和数字。

我已经走了,为您创建了一个使用此正则表达式的白名单方法。

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

这种方法,valid_login?只如果字符串包含字母,数字或下划线,那么您所有的特殊字符返回true(加上你忽略了那些不符合这些要求的任何其他)被安全地检测到。

用法:

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

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

将工作

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