Ответ 1
Вы должны использовать Regexp.escape
regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])
У меня есть форма, которая отправляет содержимое текстового поля в мое приложение Rails и Мне нужно создать регулярное выражение этой строки.
Я пробовал вот так:
regex = /#{params[:text]}/
В общем, это работает, но если в строке содержатся скобки или специальные символы, этот метод не будет работать.
Я не хочу, чтобы Rails заботился о символах. Они должны автоматически сбрасываться.
Я пробовал вот так:
/\Q#{params[:text]}\E/
но это тоже не работает.
Вы должны использовать Regexp.escape
regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])
Regexp.escape
экранирует специальные символы:
params[:text] = "[foo-bar]"
Regexp.new(Regexp.escape(params[:text]))
# => /\[foo\-bar\]/