4

我有一个简单的搜索查询:

<cfquery name="_qSearch" dbtype="Query">
    SELECT 
        *
    FROM    MyQoQ
    WHERE
        DESCRIPTION LIKE '%#URL.searchString#%'
</cfquery>

此查询对大多数值都非常有效。但是,如果有人搜索类似 的值"xxx[en",则会出现错误消息The pattern of the LIKE conditional is malformed.

有什么办法可以解决这个问题,因为括号在 CFQUERY 中有特殊用途?

4

1 回答 1

8

QoQ 共享TSQL (MS SQL Server) 的一个特性,它不仅仅是LIKE%_的通配符——它还支持正则表达式样式的字符类,就像[a-z]任何小写字母一样。

要转义这些值并匹配文字等价物,您可以使用字符类本身,即[[]匹配文字[,当然您可能还想转义用户输入中的任何%_- 您可以像这样执行所有三个操作:

'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%'

这只是一个简单的正则表达式替换(使用String.replaceAll)来匹配[or %or的所有实例_并将每个实例包装在[..中]-$0替换侧的代表匹配的文本。

于 2014-02-24T21:57:46.380 回答