我有mongoid字段'value'作为字符串,如“Sivatha(St. 329)”,我使用正则表达式通过ajax查询值如下:
Street.any_of({ :value => /.*#{params[:q]}.*/i }))
它引发了错误,而我的参数值是“Sivatha(St。”,当我打字时,当我有确切的价值时它根本没有返回结果“Sivatha(St. 329)”。
这里有人可以给我一些建议吗?谢谢。
在将它们插入正则表达式之前,您应该使用Regexp.quote
引用字符串:
:value => /.*#{Regexp.quote(params[:q])}.*/i
你不需要领先和尾随.*
,他们不为你做任何事情,所以你可以说:
:value => /#{Regexp.quote(params[:q])}/i
如果你没有使用不区分大小写的正则表达式,那么你可以使用Regexp.union
来引用和regex-ify你的字符串:
:value => Regexp.union(params[:q])
但是没有干净的方法来添加/i
选项,所以/#{Regexp.quote(params[:q])}/i
可能是你能做的最干净的事情。