webForumDet fria alternativet

Array för att ersätta ord. Problem med case sensitiv

ASP

13 svar · 265 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Hej

Jag har den här koden för att skriva ut en beskrivning av varje sida som presenteras av sökningen. Koden tar det man sökt på och gör de feta i beskrivningen. Problemet är att det är case sensitiv. Kan man ändra det på något sätt så att om mn söker på "Projekt" så gör den även "projekt" fet och inte bara "Projekt". Det ska även funka med "PROJEKT"

	arrSokord = Split(sSearchString)
	beskrivning = TRIM(util.TruncateToWhitespace(oRS("Characterization"), 200))
	 
	FOR I = 0 TO UBound(arrSokord)
	  beskrivning = replace(beskrivning, arrSokord(i), "<span class=""mallFet"">"&arrSokord(i)&"</span>")
	NEXT
Medlem sedan dec. 20003 887 inlägg
#2

Använd dig av LCase(sökord) när du gör sökningen.

/r hmm... jag kanske missförstog mig själv där ;) Det är det du kollar mot som du ska ändra... Eller så visar du hur du genomför sökningen, så kanske du kan få ett annat tips.

Medlem sedan jan. 20013 406 inlägg
#3

Så här har jag tänkt:

Om jag söker på: Projekt aspmodul

Och så har jag besrivningen:

Vi har idag ett mycket intressant projekt som kommer att börja nästa vecka. Det Handlar om att bygga en ASPmodul

När jag kört igenom min funktion så ska besrivningen se ut så här:

Vi har idag ett mycket intressant projekt som kommer att börja nästa vecka. Det Handlar om att bygga en ASPmodul

Medlem sedan dec. 20003 887 inlägg
#4

Du får ta innehållet och göra LCase() på det du ska söka igenom, samt LCase() på sökordet/en. UCase() går lika bra :)

Mycket mer hjälp än så kan jag inte ge dig, eftersom jag inte vet hur du söker igenom texterna. Jag kan testa något annat...

astrWords = Split([i]sökordssträng[/i], " ")
strSearch = astrWords(0)

If Ubound(astrWords) > 1 Then
    For i = 1 To UBound(sökordssträng) - 1
        strSearch = strSearch & "|" & astrWords(i)
    Next i
End If

Set objRegExp = New RegExp

objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = "(" & strSearch & ")"

strSearchResult = objRegExp.Replace([i]textendusökeri[/i], "<b>$1</b>")

Response.Write strSearchResult

Kanske, kanske inte...

Medlem sedan jan. 20013 406 inlägg
#5

BEskrivningen finns bara i en variabel med namnet beskrivning

Medlem sedan dec. 20003 887 inlägg
#6
astrWords = Split([i]sökordssträng[/i], " ")
strSearch = astrWords(0)

If Ubound(astrWords) > 1 Then
    For i = 1 To UBound(sökordssträng) - 1
        strSearch = strSearch & "|" & astrWords(i)
    Next i
End If

Set objRegExp = New RegExp

objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = "(" & strSearch & ")"

strSearchResult = objRegExp.Replace([b]beskrivning[/b], "<b>$1</b>")

Response.Write strSearchResult
Medlem sedan jan. 20013 406 inlägg
#7

Tack Engine^ :bire
koden funkar perfekt om man tar bort i:et efter next.

Medlem sedan jan. 20013 406 inlägg
#8

Om man har ett ord som är mindre en tre bokstäver så vill jag inte att det fetmarkerar det. Söker man tex. på bara en bokstav blir det feta bokstäver nästan överallt.

Jag försökte med det här men det fungerade inte

	If Ubound(astrWords) > 1 Then
      For i = 1 To UBound(sSearchString) - 1
	    IF len(astrWords(i)) > 2 THEN
          strSearch = strSearch & "|" & astrWords(i)
		END IF
      Next 
	End If
Medlem sedan jan. 20013 406 inlägg
#9

Ingen som kan?

Medlem sedan dec. 20003 887 inlägg
#10

Lustigt... det trodde jag skulle ha fungerat...

If Len$(Cstr(astrWords(i))) > 2 Then
    strSearch...
End If

Nu är det väl något uppenbart, som man inte tänker på ;)

Medlem sedan jan. 20013 406 inlägg
#11

Nej det fungerar inte

If Ubound(astrWords) > 1 Then
 For i = 1 To UBound(sSearchString) - 1
   If Len(Cstr(astrWords(i))) > 2 Then
     strSearch = strSearch & "|" & astrWords(i)
   End If
 Next 
End If

I din kod så får jag ett felmeddelande på $. Tar jag bort det fungerar det ändå inte.

If Len[b]$[/b](Cstr(astrWords(i))) > 2 Then
    strSearch...
End If
Medlem sedan jan. 20013 406 inlägg
#12

Kom på ett till problem den tar bara första ordet och fetmarkerar inte allihop.

Tex. som sokfranse är projekt villtomt
så fetmarerar den bara projekt

Medlem sedan jan. 20013 406 inlägg
#13

Gjorde så här och nu funkar allt.

astrWords = Split(sSearchString, " ")
	
	FOR i2 = 0 to Ubound(astrWords)
	   IF len(astrWords(i2)) > 3 THEN
	     strSearch = astrWords(i2)

	
	    If Ubound(astrWords) > 1 Then
          For i = 1 To UBound(sSearchString) - 1
             strSearch = strSearch & "|" & astrWords(i)
          Next 
	    End If
	

	    Set objRegExp = New RegExp

	    objRegExp.Global = True
	    objRegExp.IgnoreCase = True
	    objRegExp.Pattern = "(" & strSearch & ")"

	    beskrivning = objRegExp.Replace(beskrivning, "<span class=""mallFet"">$1</span>")
	  END IF
	NEXT
Medlem sedan dec. 20003 887 inlägg
#14

Trevligt!

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)