我想验证带有特殊字符!@#S%^*()+_-?/<>:"';
的登录名。在轨道上的红宝石中使用正则表达式的空间。这些特殊字符不应被接受。这是什么代码?
答案 0 :(得分:7)
validates_format_of :username, :with => /^[A-Za-z0-9.&]*\z/
将起作用
答案 1 :(得分:3)
您已收到此线程中的regexp,可以回答您的具体问题。你正在做一个黑名单的方法(阻止你不想要的角色),但这真的是最好的吗?我看到你没有覆盖&amp;或〜,还有许多其他特殊字符可能仍然缺失。
如果你试图阻止特殊字符,我建议采用白名单方法,根据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
答案 2 :(得分:1)
嗯,我不知道rails,但这就是我所知道的其他语言中正则表达式的样子:
^[^!@#\$%\^\*\(\)\+_\-\?/\<\>:"';\. ]$
答案 3 :(得分:1)
正则表达式/^\w*$/
只允许使用字母,数字和下划线。
另外,您在http://rubular.com
上有一个备忘单和一个活的红宝石正则表达式编辑器答案 4 :(得分:0)
答案 5 :(得分:0)
validates_format_of :username, :with => /^[^!@#S%\^\*()\+_-\?\/<>:\"';]+$/