限制表格上的特定单词|红宝石在铁轨上

时间:2018-06-21 01:43:48

标签: ruby-on-rails ruby regex

我正在博客上执行评论部分,想知道是否有一种方法可以防止用户提交诸如ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; admin之类的名称,以防止人们进行拖钓或其他错误的操作,做。

我正在使用此REGEX验证电子邮件,以确保其格式正确:[company name]

我只是不确定这是否是我需要采用的相同方法,还是不确定是否存在阻止特定字符串输入到表单输入中的内置方法。

在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

有多种方法可以执行此操作,具体取决于您希望前端如何表现。最简单的方法是使用简单的HTML-5表单验证或javascript在前端进行验证。对于HTML-5验证,您可以在pattern上使用input type="text"属性(可以使用text_field_tag生成in rails)。此属性接受正则表达式作为其值,您可以使用它来阻止输入某些关键字。您可以在这里https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation

了解更多信息

您还可以在后端(直接在控制器中)进行验证(很难说出您真正需要什么,但就像一个简单的示例一样)

if (params[:my_input_form].split & bad_words_array).any?
  flash[:error] = "you entered a bad word"
  redirect_to the_same_page_path
end

注意:在这种情况下,&给出两个数组的交集,并且如果两个数组之间至少有一个公共元素(在这种情况下,如果存在任何一个,则将返回一个非空数组)输入的单词在bad_words数组中。)

如果您想在后端执行此操作,而且更为复杂,我可能会将验证作为自定义验证器移入模型。

答案 1 :(得分:0)

您可以使用宝石obscenity。它使您能够指定黑名单中的单词,并将其替换为 [经审查] 字符串

答案 2 :(得分:0)

已提议的替代方法是在模型上使用正则表达式创建custom validation

例如:

validate :bad_words

def bad_words
  if (/admin|sony/i.match(self.name))
    errors.add(:name, "contains a word not allowed")
  end
end

您应生成适合您需要的正则表达式,但建议使用regexp i修饰符进行不区分大小写的搜索

希望对您有帮助!