2012-08-16 73 views
24

我有一個表單,它將文本字段的內容發送到我的Rails應用程序,並且我必須生成此字符串的正則表達式。正則表達式中的特殊字符?

我想它是這樣的:

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

一般來說,這是工作,但如果括號或特殊字符的字符串中包含的,這種方法是行不通的。

我不想讓Rails照顧字符。他們應該被自動轉義。

我想它是這樣的:

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

但這不是工作要麼。

回答

35

您應該使用Regexp.escape

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

Regexp.escape轉義特殊字符:

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