源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-12-03 06:45 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!
CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式: 词语搜索 [例如: 小明]  词组搜索  词组里面每一个词都将被检索  例如: 小强1 小名1 小强强 小小强  逻辑搜索  支持 And 和 Or 运算符.  例如: 小明 And 小强 And 小小强 复合条件: 例如:(小小明 Or 小明) And (小强 Or 小小强)  例如:(小小明 Or 小名) And 小小强 例如: ROOT1 And (广东人 Or 北京人)  -----------------------------------------------------------
[u]复制代码[/u] 代码如下:
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
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部