webForumDet fria alternativet

Replace Funktion

ASPur ASP

13 svar · 1 029 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#1

Hej

Jag skulle behöva hjälp med en Replace Funktion.

Den ska kolla igenom alla textrutorna på sidan som sparas i databasen efter flera olika ord som sedan ska ersättas med något annat.
tex. Kalle --> Anka

Undrar då hur man gör en sådan på smidigaste sättet?

Tacksam för all hjälp :bire

Medlem sedan juni 20019 519 inlägg
#2
dim orginalstring
orginalstring = "Kalle"
response.write replace(orginalstring,"Kalle","Anka")

kan även göras med en array..

Medlem sedan sep. 2005833 inlägg
#3

ok, men hade mer tänkt att den skulle se ut såhär:

Function SafeSQL(strText)
SafeSQL = Replace(strText, "'", "''")
End function

så man kan tex anropa den sen. Men hur gör man om man ska ersätta flera ord som ev kan finnas med i textfälten? (i samma funktion)
tex.
Kalle -->Anka
Kalle1 --> Anka1
osv
:q

Medlem sedan juni 20019 519 inlägg
#4

just nu kommer den ta allt med Kalle att göra och ersätta..
du kan göra en array också.. om du vill ha Musse --> Pigg , Mimmi --> Mrs.Pigg etc..

du får köra en split på de ord du vill leta och de ord du ska ersätta träffen med... dock måste det vara lika många i båda arrayerna :D

Medlem sedan okt. 20041 556 inlägg
#5
Function myReplace(strText)
    Dim tmp
    tmp = Replace(strText, "'", "''") 
    tmp = Replace(tmp, " Karl ", " Kalle ")
    tmp = Replace(tmp, " Bo ", " Bosse ")
    tmp = Replace(tmp, " Hans ", " Hasse ")
    'Fortsätt att fylla på med flera här...
    myReplace = tmp
End function
Medlem sedan juni 20019 519 inlägg
#6

Travoni skrev:

Function myReplace(strText)
    Dim tmp
    tmp = Replace(strText, "'", "''") 
    tmp = Replace(tmp, " Karl ", " Kalle ")
    tmp = Replace(tmp, " Bo ", " Bosse ")
    tmp = Replace(tmp, " Hans ", " Hasse ")
    'Fortsätt att fylla på med flera här...
    myReplace = tmp
End function

inte så bra att använda " Karl " då meningen kan börja med "Karl heter en man" .. då kommer den aldrig träffar det...
Går att lösa med Reg.Exp så att det blir ordbundet..

Medlem sedan juni 20019 519 inlägg
#7
Function myReplace(strText)
strText = replace(strText,"'","''")
With New RegExp
   .Global = True
   .IgnoreCase = True

   .Pattern = "^(Karl)$"
   strText = .Replace(strText ,"Kalle")

   .Pattern = "^(Bo)$"
   strText = .Replace(strText ,"Bosse")

End With
myReplace = strText
end function

då kommer även kArL men inte karl1 träffas...

Medlem sedan sep. 2005833 inlägg
#8

kan man göra så man kopplar denna till en databas som man kan lägga in ord som inte får anv i gästboken? Om man tex har fällten repOrd och repAndratill i tabellen andraord.
Så man inte kan skicka in massa javascript kod som körs i gästboken och andra otrevliga ord.

Medlem sedan juni 20019 519 inlägg
#9

jo... klart du kan...

Medlem sedan sep. 2005833 inlägg
#10

haha, oki, men hur? ska man loopa fram
.Pattern = "^(Karl)$"
strText = .Replace(strText ,"Kalle")
massa gånger då? (namnet byts då mot fälltnamnen)

Medlem sedan dec. 20025 483 inlägg
#11

Om ingen HTML får användas kanske Server.HTMLEncode() tål att ses över.

Vill du förbjuda vissa taggar kan följande brukas

set re = new regexp
re.pattern = "<(script|object|table)"
re.global = true
re.ignorecase = true
txt = re.replace(txt, "&lt;$1")
re.pattern = "</(script|object|table)"
txt = re.replace(txt, "&lt;/$1")
set re = nothing

Om du har en tabell (som du beskriver ovan):

set rs = ...
if not rs.eof then
  set re = new regexp
  re.global = true
  re.ignorecase = true
  do while not rs.eof
    re.pattern = "\b" & rs("repOrd") & "\b"
    txt = re.replace(txt, rs("repAndraTill"))
    rs.movenext
  loop
  set re = nothing
end if

om jag förstått din tabelldesign rätt.

Medlem sedan sep. 2005833 inlägg
#12

ok, tackar :p

Medlem sedan nov. 2001402 inlägg
#13

Denna såg väldigt liten och smidig ut.

dim orginalstring
orginalstring = "Kalle"
response.write replace(orginalstring,"Kalle","Anka")

Men om orginalstring är ="images

Hur får man till det då?

dim orginalstring
orginalstring = "="images"
response.write replace(orginalstring,"="images","="../images")

Lär ju inte fungera vad? Kan man köra dubbla "" eller nåt annat för att få det att fungera?

Medlem sedan juni 20019 519 inlägg
#14
dim orginalstring
orginalstring = "=""images"
response.write replace(orginalstring,"=""images","=""../images")

eftersom " bryter strängen så måste du använda dig av "" för "

256 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
126 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)