我有一个 Ruby 中的禁用词数组:
bw = ["test"]
我希望检查@nick
是否匹配。
例如:
@nick = 'justatest'
将匹配。
我尝试过:
if @nick.include?(bw)
##
end
但这似乎不是正确的方法,因为它没有捕获它。
我有一个 Ruby 中的禁用词数组:
bw = ["test"]
我希望检查@nick
是否匹配。
例如:
@nick = 'justatest'
将匹配。
我尝试过:
if @nick.include?(bw)
##
end
但这似乎不是正确的方法,因为它没有捕获它。
@nick =~ Regexp.new(bw.map { |w| Regexp.escape(w) }.join('|'))
在这里,我们将bw
中的所有字符串合并为一个正则表达式,并转义可能在正则表达式中具有特殊含义的符号,并检查输入是否与其匹配。
实现此功能的另一种方法是单独检查每个被列入黑名单的单词:
bw.any? { |w| @nick[Regexp.new(Regexp.escape(w))] }
希望它有所帮助。
Regexp.escape
之外,我只是在我的评论中添加了它作为建议。 - engineersmnky> bw.any? { |word| @nick[word] }
=> true
虽然将字符串数组转换为正则表达式可能更快:
> bw = ["test", "just", "gagan"]
> g = /#{bw.join("|")}/
> g === @nick
=> true
@nick.include?(word)
可以缩写为 @nick[word]
。不确定这是否真的是一种改进。 - undur_gongor
if bw.any? { |word| @nick =~ /#{word}/}
应该可以工作。示例 - engineersmnky