2012-08-16 13 views
24

テキストフィールドの内容をRailsアプリケーションに送信するフォームがあります。 この文字列の正規表現を生成する必要があります。RegExの特殊文字をエスケープしますか?

私はこのようにそれを試してみました。この作業をされていますが、ブラケットや特殊文字が文字列に含まれている場合、このメソッドは動作しません一般的に

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\]/ 
関連する問題