Jag kan försöka bringa lite insikt i vad som faktiskt händer under ytan.
Instr returnerar positionen till den första förekomsten av söksträngen i den strängen man söker i. Hittas inte söksträngen får man tillbaka 0 istället. Därför kan man skriva:
IF InStr("**", strText) THEN ...
...eftersom if tycker 0 är falskt och allt annat är sant.
Problemet kommer när du sätter in NOT. NOT funkar inte som man kanske tror, att det gör falskt till sant och sant till falskt. Istället inverterar NOT varje binär bit i talet. Det funkar visserligen för 0, som inverteras och blir -1 (Vilket motsvarar att alla bitar är satta i talet, t ex 11111111111111111111111111111111 i binärkod för ett 32-bitars tal)
Men om söksträngen däremot hittas precis i början, på första tecknet, får du tillbaka 1, eller i binärt, ...0001 (... = resten nollor) vilket inverteras och blir ...1110 (... = resten ettor denna gång) alltså -2.
Om strängen hittas på andra tecknet får du tillbaka 2, binärt ...0010 som inverteras och blir ...1101 vilket betyder -3.
Det enda sättet NOT x kan returnera 0 är om x innehåller inversen av 0, som är -1. Men Instr kan aldrig returnera -1, eller något negativt tal heller. Med andra ord, i koden...
IF NOT InStr("**", strText) THEN ...
kommer ... alltid att köras eftersom villkoret i IF alltid är sant.
InstrRev kommer inte hjälpa dig heller. Skillnaden mellan Instr och InstrRev är att InstrRev söker bakifrån, och returnerar den sista förekomsten av söksträngen istället för den första. Därmed kommer de två funktionerna returnera olika värden om strängen du söker i har två förekomster av söksträngen. Dock returnerar både 0 om söksträngen inte hittas alls.
Och lösningen är som Peter S pekade ut att jämföra resultatet från Instr med 0. Har du både kod som ska köras om söksträngen finns och om den inte finns kan du ju komma runt problemet genom att byta plats på kodkropparna för IF- och ELSE. Typ:
if InStr(strText, "**") then
response.write "strText innehåller **"
else
response.write "strText innehåller int **"
end if
... så slipper du använda = 0
För överigt... Din omskrivning
IF InstrRev(myText, "**") > 0 THEN response.write " ****************"
är helt ekvivalent med
IF InstrRev(myText, "**") THEN response.write " ****************"
Givet de värden som Instr kan spotta ur sig, blir hela uttrycket falsk om, och endast om, Instr returnerar 0, och i alla andra fall sant, alltså helt likvärdigt.