验证特殊字符

use*_*974 3 ruby regex ruby-on-rails

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

use*_*974 7

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

将工作


And*_*res 5

您已在此线程中收到可以回答您的特定问题的正则表达式。您正在采用黑名单方法(阻止您不想要的字符),但这真的是最好的吗?我发现您没有涵盖 & 或 ~,并且可能仍然缺少许多其他特殊字符。

如果您尝试阻止特殊字符,我建议按照 pablorc 的正则表达式建议采用白名单方法。它的范围要广泛得多,只列出您想要允许的内容......非特殊字符:仅单词、下划线和数字。

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

def valid_login?(str)
    return true if (/^\w*$/.match(str))
    return false
end
Run Code Online (Sandbox Code Playgroud)

仅当字符串包含字母、数字或下划线时,此方法 valid_login? 才会返回 true,因此所有特殊字符(以及您遗漏的任何其他不满足这些要求的字符)都会被安全地检测到。

用法:

> valid_login?("testy") 
  true
> valid_login?("a b")
  false
> valid_login?("a'")
  false
Run Code Online (Sandbox Code Playgroud)