退出RegEx中的特殊字符?

时间:2012-08-16 14:44:49

标签: ruby-on-rails ruby regex

我有一个表单,它将文本字段的内容发送到我的Rails应用程序和 我必须生成这个字符串的正则表达式。

我试过这样:

regex = /#{params[:text]}/

一般情况下这是有效的,但是如果字符串中包含括号或特殊字符,则此方法将不起作用。

我不希望Rails照顾这些字符。它们应该自动转义。

我试过这样:

/\Q#{params[:text]}\E/

但这也不起作用。

2 个答案:

答案 0 :(得分:43)

您应该使用Regexp.escape

regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])

答案 1 :(得分:8)

Regexp.escape转义特殊字符:

params[:text] = "[foo-bar]"
Regexp.new(Regexp.escape(params[:text]))
# => /\[foo\-bar\]/