30

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

私はこのようにそれを試しました:

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

通常、これは機能しますが、文字列に角かっこまたは特殊文字が含まれている場合、このメソッドは機能しません。

Railsにcharsの面倒を見てもらいたくありません。それらは自動的にエスケープされるべきです。

私はこのようにそれを試しました:

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

しかし、これも機能していません。

4

2 に答える 2

47

使用する必要がありますRegexp.escape

regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])
于 2012-08-16T14:54:09.893 に答える
8

Regexp.escape特殊文字をエスケープします:

params[:text] = "[foo-bar]"
Regexp.new(Regexp.escape(params[:text]))
# => /\[foo\-bar\]/
于 2012-08-16T14:56:04.193 に答える