Ruby on rails 带括号的查询mongoid字符串

Ruby on rails 带括号的查询mongoid字符串,ruby-on-rails,regex,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails,Regex,Ruby On Rails 3,Mongodb,Mongoid,我使用mongoid字段“value”作为类似“Sivatha(St.329)”的字符串,并使用正则表达式通过ajax查询值,如下所示: Street.any_of({ :value => /.*#{params[:q]}.*/i })) 键入时,当我的参数值为“Sivatha(St.”时,它会引发错误,当我有确切的值“Sivatha(St.329)”时,它根本不会返回结果 这里有人能给我一些建议吗?谢谢。在将字符串插入正则表达式之前,您应该引用字符串: :value => /.*

我使用mongoid字段“value”作为类似“Sivatha(St.329)”的字符串,并使用正则表达式通过ajax查询值,如下所示:

Street.any_of({ :value => /.*#{params[:q]}.*/i }))
键入时,当我的参数值为“Sivatha(St.”时,它会引发错误,当我有确切的值“Sivatha(St.329)”时,它根本不会返回结果


这里有人能给我一些建议吗?谢谢。

在将字符串插入正则表达式之前,您应该引用字符串:

:value => /.*#{Regexp.quote(params[:q])}.*/i
您不需要前导和尾随的
*
,它们不会为您做任何事情,因此您可以说:

:value => /#{Regexp.quote(params[:q])}/i
如果您没有使用不区分大小写的正则表达式,那么您可以使用引号和正则表达式同时对字符串进行验证:

:value => Regexp.union(params[:q])
但是没有干净的方法来添加
/i
选项,因此
/{Regexp.quote(params[:q])}/i
可能是您能做的最干净的事情。

是的,谢谢大家:-)我做得很好。我还找到了Regexp.escape(params[:q]),它生成的结果与Regexp.quote(params[:q])完全相同