我正在博客上执行评论部分,想知道是否有一种方法可以防止用户提交诸如ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
或admin
之类的名称,以防止人们进行拖钓或其他错误的操作,做。
我正在使用此REGEX验证电子邮件,以确保其格式正确:[company name]
我只是不确定这是否是我需要采用的相同方法,还是不确定是否存在阻止特定字符串输入到表单输入中的内置方法。
在此先感谢您的帮助!
答案 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
修饰符进行不区分大小写的搜索
希望对您有帮助!