Я создал приложение несколько лет назад, используя это; то, что я сделал, это внешний интерфейс, который дает вам текстовое поле для ввода ваших терминов и имеет раскрывающийся список для выбора между несколькими вариантами, например:
<option selected value="AND">All of the words entered</option>
<option value="OR">Any of the words entered</option>
<option value="ALL">The exact phrase entered</option>
Так что я не хочу, чтобы они печатали ands or ors - я делаю это для них. Я позволю им цитировать подфразу.
Ниже приведен код, который выполняет это. Результирующая фраза отправляется в качестве параметра в процедуру; как упоминалось выше, вы действительно должны сделать это для защиты от внедрения SQL. К сожалению, этот код является устаревшим ASP VBScript и даже не написан хорошо по стандартам этого языка, но, возможно, это дает вам представление.
function formatContainsString (sCriteria, sANDorOR)
dim sReturnBuf 'where we build our string
dim sWordList 'sCriteria split
dim lCurPos 'where we are at in sWordList
dim bInnerQuotes ' an open quote was found
if sCriteria = "" or sANDorOR = "" then
formatContainsString = ""
exit function
end if
' If the passed parameter is 'ALL' then use the exact phrase typed by users
if sANDorOR = "ALL" then
formatContainsString = "'" & chr(34) & sCriteria & chr(34) & "'"
Exit Function
End If
sReturnBuf = "'"
sWordList = split(sCriteria," ")
for lCurPos = 0 to ubound(sWordList)
if bInnerQuotes then 'want to pass this as a single phrase
sReturnBuf = sReturnBuf & " " & sWordList(lCurPos)
if right(sWordList(lCurPos),1) = chr(34) then
sReturnBuf = left(sReturnBuf,len(sReturnBuf)-1) & "*" & chr(34)
sReturnBuf = sReturnBuf & " " & sANDorOR & " "'phrase is over
bInnerQuotes = False
end if
else
if left(sWordList(lCurPos),1) = chr(34) then
sReturnBuf = sReturnBuf & sWordList(lCurPos)
bInnerQuotes = True
else
sReturnBuf = sReturnBuf & chr(34) & sWordList(lCurPos) & "*" & _
chr(34) & " " & sANDorOR & " "'quote the word
end if
end if
next
'finally, remove the last AND or OR... and append the tick
formatContainsString = left(sReturnBuf,len(sReturnBuf)-(len(sANDorOR)+1)) _
& "'"
end function