标签: ruby regex escaping
我正在运行最新版本的sinatra和ruby 1.9.3
我让用户在我的sinatra应用程序中创建自定义正则表达式。
代码:
Posts.all(:message => %r{(?i)(.*)#{params[:searchterm]}(.*)})
如何逃避#{params[:searchterm]}以便用户无法插入更多正则表达式?
#{params[:searchterm]}
(如果用户搜索(.)*user他得到的结果应该不起作用!
(.)*user
答案 0 :(得分:4)
使用Regexp.escape来转义变量值:
Regexp.escape
%r{(?i)(.*)#{Regexp.escape(params[:searchterm])}(.*)}