0

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

Street.any_of({ :value => /.*#{params[:q]}.*/i }))

当我打字时我的参数值为“ Sivatha (St. ”时它会引发错误,并且当我有确切的值“ Sivatha (St. 329) ”时它根本不会返回结果。

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

4

1 回答 1

2

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

:value => /.*#{Regexp.quote(params[:q])}.*/i

你不需要前导和尾随.*,它们不会为你做任何事情,所以你可以说:

:value => /#{Regexp.quote(params[:q])}/i

如果您没有使用不区分大小写的正则表达式,那么您可以使用Regexp.union一次来引用和正则化您的字符串:

:value => Regexp.union(params[:q])

但是没有干净的方法可以添加/i选项,所以/#{Regexp.quote(params[:q])}/i可能是您可以做的最干净的事情。

于 2013-09-26T04:39:19.067 回答