当前位置: 首页 > 图文教程 > 网络编程 > ASP > 实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!

ASP
ASP里面令人震撼地Debug类(VBScript)
提供个 全免杀海洋2006asp木马 下载
VBS加密免杀器 下载
asp页面下的乱码问题终于解决了
一款不错的asp木马 黑色界面
七步倒┈→专用asp后门
ASP对网页进行保护的简单代码 ip
asp遍历站点所有文件夹的代码
用js实现QQ在线查询功能
非常不错的ASP+Access数据库的终极安全大法18则
万能Asp防注入代码 拒绝攻击
用asp实现把文件打包成Xml文件包,带解包的ASP工具附下载
asp下实现代码的“运行代码”“复制代码”“保存代码”功能源码
asp字符串加密解密函数
asp adodb.stream对象的方法/属性
asp rs.open sql,conn,3,1中3,1代表什么?
推荐ASP中VBScript常用函数
ASP的Global.asa使用说明
ASP七大对象说明分析
ASP网站生成静态html页面技术小结

ASP 中的 实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 82 ::
收藏到网摘: n/a

CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式:
词语搜索 [例如: 小明]
词组搜索
词组里面每一个词都将被检索
例如: 小强1 小名1 小强强 小小强
逻辑搜索
支持 And 和 Or 运算符.
例如: 小明 And 小强 And 小小强
复合条件:
例如:(小小明 Or 小明) And (小强 Or 小小强)
例如:(小小明 Or 小名) And 小小强
例如: ROOT1 And (广东人 Or 北京人)
-----------------------------------------------------------
复制代码 代码如下:

Class CreateQueryString
Public objReg
Public intStart
Public strField
Private objNode2
Private strText
Public Property Let QueryString( strValue )
strText = Lcase( strValue )
End Property
Private Sub Class_Initialize()
Set objReg = new RegExp
strField = "(标题+文章)"
End Sub
Private Sub Class_Terminate()
Set objReg = Nothing
End Sub
Public Default Function GetText()
Dim blnRes
Dim strSky
With objReg
.IgnoreCase = true
.Global = True
.Pattern = "\s"
blnRes = .Test( strText )
End With
If (Not blnRes) Then
intStart = 2
GetText = strField & " like '%" & strText & "%'"
Else
objReg.Pattern = "\sand|\sor"
blnRes = objReg.Test( strText )
If blnRes Then
strSky = check()
If strSky = False Then
GetText = wahaha()
Else
GetText = strSky
End if
Else
GetText = wahaha()
End if
End If
End Function
Private Function wahaha()
Dim strTer
Dim strLikes
Dim strOrs
Dim strI
Dim objRe
strTer = ""
strLikes = " or (" & strField & " like '%"
strOrs = "%')"
objReg.Pattern = "(\S*\S)"
Set objRe = objReg.Execute(strText)
For Each strI In objRe
strTer = strTer & strLikes & strI & strOrs
Next
wahaha = Mid( strTer , 4 )
intStart = 3
End Function
Private Function CheckYes( strMode , intCount)
Dim objNode1
objReg.Pattern = strMode
Set objNode1 = objReg.Execute( strText )
If objNode1.Count < 1 Then
CheckYes = True
Else
Set objNode2 = objNode1( 0 )
If objNode2.subMatches.Count < intCount Then
CheckYes = True
End If
End If
End Function
Private Function ORAND()
Dim strSSS
Dim strCCC
Dim strAAA
Dim a143
Dim i
Dim objN
Dim blnTru
Dim blnBBB
strSSS = "(" & strField & " like '%"
strCCC = "%')"
strAAA = ""
n1 = 0
blnTru = True
blnBBB = True
objReg.Pattern = "(\S*\S)"
Set objN = objReg.Execute( strText )
a143 = objN.Count - 1
If (objN.Item( a143 ) = "and") Or (objN.Item( a143 ) = "or") Then
ORAND = False
Exit Function
End if
For Each i In objN
If blnTru Then
If (i <> "and") And (i <> "or") Then
blnTru = False
strAAA = strAAA & strSSS & i & strCCC
Else
blnBBB = false
Exit for
End if
Else
If (i = "and") Or (i = "or") Then
blnTru = True
strAAA = strAAA & i
Else
blnBBB = False
Exit For
End if
End if
Next
If (Not blnBBB) Then
ORAND = False
Else
ORAND = strAAA
intStart = 4
End if
End Function

Private Function check()
Dim re
Dim re1
Dim re2
Dim re3
Dim str
Dim str1
Dim a1
Dim a2
Dim a3
Dim a4
str = strField & " like '%"
str1 = "%'"
With objReg
.Pattern = "^\(.+\)\s(and|or)\s"
re = .Test( strText )
.Pattern = "\s(and|or)\s\(.+\)$"
re3 = .Test( strText )
End With
If re And re3 Then
If CheckYes( "^\((\S*\S) (\bor\b|\band\b) (\S*\S)\) (and|or) \((\S*\S) (\bor\b|\band\b) (\S*\S)\)$" , 6 ) Then
check = False
Else
With objNode2
a1 = .submatches(0)
a2 = .submatches(2)
a3 = .submatches(4)
a4 = .submatches(6)
check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_
.submatches(3) & " (" & str & a3 & str1 & " " & .submatches(5) & " " & str & a4 & str1 & ")"
intStart = 5
End With
End If
ElseIf re Then
If CheckYes( "^\((\S*\S) (\bor\b|\band\b) (\S*\S)\) (and|or) (.+)" , 4 ) Then
check = False
Else
With objNode2
a1 = .submatches(0)
a2 = .submatches(2)
a3 = .submatches(4)
check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_
.submatches(3) & " (" & str & a3 & str1 & ")"
intStart = 5
End With
End If
ElseIf re3 Then
If CheckYes( "(.+) (and|or) \((\S*\S) (\bor\b|\band\b) (\S*\S)\)$" , 4 ) Then
check = False
Else
With objNode2
a1 = .submatches(0)
a2 = .submatches(2)
a3 = .submatches(4)
check = "(" & str & a1 & str1 & ") " & .submatches(1) & " (" & str & a2 & str1 & " " &_
.submatches(3) & " " & str & a3 & str1 & ")"
intStart = 5
End With
End If
Else
check = ORAND()
End If
End Function
End Class

-------------------------注意-----------------------------
替换好的字符串并不是完整的SQL语句.只是生成SQL语句的WHERE关键字后面的表达式.发送到ASP程序的时候.你可以在前面加上
"select id,标题,name,TableName from SearchAll where "
这样类似的SQL语句
-------------------------VBScript例子-----------------------------
Dim objROOT1
Set objROOT1 = new CreateQueryString
objROOT1.QueryString = strText '====传入要替换的字符串
objROOT1.strField = "要查询的字段名字" '===如果不设置.默认值是"(标题+文章)"
strText = objROOT1() '=========得到替换好的SQL语句
If (objQueryString.intStart = 4) Then
Call Msgbox("启动按逻辑搜索")
End If
Set objROOT1 = Nothing