Ruby on rails 限制表单上的特定单词| ruby on rails

Ruby on rails 限制表单上的特定单词| ruby on rails,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我在我的博客上设置了一个评论部分,我想知道是否有一种方法可以防止用户提交诸如admin或[company name]之类的名称,以防止人们在博客上乱动或做错事 我正在使用此正则表达式验证电子邮件,以确保其格式正确:VALID\u EMAIL\u REGEX=/\A[\w+\-.]+@[A-z\d\-]+\.[A-z\d\-]+*\.[A-z]+\z/I 我只是不确定这是否与我需要采取的方法相同,或者是否有内置的方法来防止将特定字符串输入表单输入 提前感谢您的帮助 有几种方法可以做到这一点,具体取

我在我的博客上设置了一个评论部分,我想知道是否有一种方法可以防止用户提交诸如admin或[company name]之类的名称,以防止人们在博客上乱动或做错事

我正在使用此正则表达式验证电子邮件,以确保其格式正确:VALID\u EMAIL\u REGEX=/\A[\w+\-.]+@[A-z\d\-]+\.[A-z\d\-]+*\.[A-z]+\z/I

我只是不确定这是否与我需要采取的方法相同,或者是否有内置的方法来防止将特定字符串输入表单输入


提前感谢您的帮助

有几种方法可以做到这一点,具体取决于您希望前端的行为方式。最简单的方法是在前端进行验证,要么使用简单的HTML-5表单验证,要么使用javascript。对于HTML-5验证,您可以在输入type=text上使用pattern属性,您可以使用text\u field\u标记在rails中生成该属性。该属性接受一个正则表达式作为其值,您可以使用它来防止输入某些关键字。你可以在这里阅读更多关于这方面的内容

您也可以在后端进行验证,或者直接在控制器中进行验证(很难说您到底需要什么,但作为一个简单的示例)

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数组中,则返回一个非空数组


如果您想在后端进行验证,而且它更复杂,我可能会将验证作为自定义验证器移动到模型中。

您可以使用gem。它使您能够指定黑名单字,并将它们替换为[censtered]字符串

已经提出的替代方案是使用正则表达式在您的模型上创建一个

例如:

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修饰符进行不区分大小写的搜索


我希望有帮助

我刚刚试过这个,它说,分裂是没有定义的。我在变量@badwords下创建了一个bad words数组,并在这个Commentparams[:body]中使用了它。split&@badwords.any?关于我为什么或者是否需要使用身体以外的东西,有什么线索吗?我也检查了前端正则表达式,它说它不支持