在我的应用中,我必须监控用户输入的内容。所以我必须防止来自网站的任何不好的话。例如,假设我的所有坏词都在这个数组中。
bad_words = ['bad', 'evil', 'terrible', 'villain', 'enemy']
如果用户输入了这些内容,我希望将其删除。这是我尝试过的一件事。
bad_words.each {|word| string.gsub(word, '')}
非常感谢帮助。
答案 0 :(得分:3)
您可以使用Gem来完成清洁工作:
https://github.com/tjackiw/obscenity
包含gem的将允许您使用以下方法:
Obscenity.configure { |config| config.whitelist = bad_words }
然后:
Obscenity.sanitize(string)
答案 1 :(得分:2)
你可以做
bad_words.each {|word| string = string.gsub(word, '')}
或
bad_words.each {|word| string.gsub!(word, '')}
要么你的原始作品有问题,那就是它正在返回一个新的字符串而不是修改旧的字符串,就像我上面提到的解决方案一样。
答案 2 :(得分:2)
这是一种方式:
bad_words = ['bad', 'evil', 'terrible', 'villain', 'enemy']
orig_str =
"Evil is embodied by a terrible villain named 'Bad' who plays badmitten"
no_bad_str = orig_str.gsub(/(?<=^|\W)\w+(?=\W|$)/) { |w|
(bad_words.include?(w.downcase)) ? '' : w }
#=> " is embodied by a named '' who plays badmitten"
(?<=^|\W)
是一个积极的背后隐藏(?=\W|$)
是一个积极的向前看可恶的,邪恶的和可怕的话可以潜行吗?当然。 orig_str
的一些示例:
badbadbad
evilterribleenemy
eviloff
flyingevil
祝你好运!
答案 3 :(得分:1)
您可以使用Regexp.union
创建包含您列表中所有字词的正则表达式:
bad_words = ['bad', 'evil', 'terrible', 'villain', 'enemy']
Regexp.union(bad_words)
# => /bad|evil|terrible|villain|enemy/
string.gsub(Regexp.union(bad_words), '')