我有一个简单的搜索查询:
<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 中有特殊用途,有什么办法可以解决这个问题吗?
环比分享了SQL的特点 http://msdn.microsoft.com/en-us/library/aa933232%28v=sql.80%29.aspx(MS SQL Server)这不仅仅是%
and _
是 LIKE 中的通配符 - 它还支持正则表达式样式的字符类,如[a-z]
对于任何小写字母。
要转义这些值并匹配文字等效项,您可以使用字符类本身,即[[]
将匹配文字[
,当然你可能也想逃避任何%
and _
在用户输入中 - 您可以像这样执行所有三个操作:
'%#Url.SearchString.replaceAll('[\[%_]','[$0]')#%'
这只是一个简单的正则表达式替换(使用字符串.replaceAll http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29) 匹配所有实例[
or %
or _
并将每一个包裹起来[
..]
- the $0
替换侧代表匹配的文本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)