Avatar billede laksen Nybegynder
01. april 2003 - 16:06 Der er 9 kommentarer og
1 løsning

Replace

Hej alle!

Jeg har en database, hvori der blandt andet ligger en stribe links.

Jeg vil gerne have en asp-kode på den side, der henter data fra databasen, som automatisk erstatter ethvert
- www.link.dk/mappe (el.lign.)
- http://link.dk/mappe (el.lign.)

med henholdsvis
- <a href="http://www.link.dk/mappe" class="link">www.link.dk/mappe</a>
- <a href="http://link.dk/mappe" class="link">http://link.dk/mappe</a>

ordenen "link" og "mappe" varierer fra link til link.

Alle links i databasen starter derfor med "www" eller "http://" og slutter med enten et mellemrum (til næste ord) eller med en parantes ")" uden mellemrum.

Er det muligt?

Hilsen laksen :D
Avatar billede -master-d- Nybegynder
01. april 2003 - 16:45 #1
Du skal have fat i noget regular expression for at få det til at virke.
Avatar billede netro Nybegynder
01. april 2003 - 20:25 #2
Du kan bruge følgende til autohighlight. Måske din pattern skal justeres en smule.

Function AutoLink(Streng)
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True

regEx.Pattern = "(www.|http://|ftp://)[\w\?\=\-\%\.\@\&\/\~]+"
Set Matches = regEx.Execute(Streng)
For Each Match in Matches
    strMatch = Match.Value
    If Left(LCase(Match.Value), 7) = "http://" Or Left(Lcase(Match.Value), 6) = "ftp://" Then
        AutoLink = Replace(Streng, Match.Value, "<a href='" & Match.Value & "' target='_blank'>" & LCase(strMatch) & "</a>")
    Else
        AutoLink = Replace(Streng, Match.Value, "<a href='http://" & Match.Value & "' target='_blank'>" & LCase(strMatch) & "</a>")
    End If
Next

End Function
Avatar billede laksen Nybegynder
01. april 2003 - 21:27 #3
netro> Det er helt SUPER! Du får point! Men hvis du har tid, må du meget gerne knytte en lille forklarende kommentar, da jeg godt kunne tænke mig at forstå det...
- Hvad betyder eks. linien "regEx.Pattern = "(www. "?
- Hvorfor må adresserne ikke indeholde æøå? Det er jo rent faktisk muligt nu på .com-domænerne?
Avatar billede laksen Nybegynder
01. april 2003 - 22:16 #4
netro> Hvorfor dur scriptet ikke, når jeg indsætter et recordset fra en access-database?

Eks.:

Function AutoLink(Streng)
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True

regEx.Pattern = "(www.|http://|ftp://)[\w\?\=\-\%\.\@\&\/\~]+"
Set Matches = regEx.Execute(Streng)
For Each Match in Matches
    strMatch = Match.Value
    If Left(LCase(Match.Value), 7) = "http://" Or Left(Lcase(Match.Value), 6) = "ftp://" Then
        AutoLink = Replace(Streng, Match.Value, "<a href='" & Match.Value & "' target='_blank' class='tekst'>" & LCase(strMatch) & "</a>")
    Else
        AutoLink = Replace(Streng, Match.Value, "<a href='http://" & Match.Value & "' target='_blank' class='tekst'>" & LCase(strMatch) & "</a>")
    End If
Next

End Function

link = AutoLink(rs("link"))
Response.Write link
Avatar billede netro Nybegynder
01. april 2003 - 23:04 #5
Pattern angiver hvad der skal søges efter i din streng og på hvilken form.
Den skal enten starte med "www.", "http://" eller "ftp://". Disse må være efterfulgt af A-Z, 0-9 og _, hvilket w'et angiver. Der ud over de øvrige karakterer, der er adskilt med en slash. + angiver, at der må være et vilkårligt antal af de nævnte tegn. Ja, du kan tilføje danske bogstaver således:

"(www.|http://|ftp://)[\w\?\=\-\%\.\@\&\/\~\æ\ø\å]+"

Hvorfor det ikke fungerer kan jeg ikke umiddelbart svare dig på, før jeg har set fejlmeddelelsen.
Avatar billede laksen Nybegynder
01. april 2003 - 23:30 #7
Der er ingen problemer, hvis jeg skriver:
link = AutoLink("asdf www.asdf.dk asdf")
Response.Write link
Her udskrives: asdf www.asdf.dk[som link] asdf

Skriver jeg derimod:
link = AutoLink(rs("link"))
Response.Write link
kommer der ingenting frem på sitet.

Der er ingen fejlmeddelse...
Avatar billede laksen Nybegynder
01. april 2003 - 23:34 #8
I de database-udtræk, der ikke indeholder et link, skrives intet.
i de database-udtræk, der derimod indeholder et link, får jeg følgende fejlmeddelse:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'regEx.Execute'

Den kan altså lige pludselig ikke forstå din funktion....?
Avatar billede laksen Nybegynder
01. april 2003 - 23:36 #9
Et lille tillægsspørgsmål: Disse regular exspressions tager de lang tid at afvikle på serveren? Jeg har nemlig en frygelig masse database-udtræk, der skal "gennemløbes".
Avatar billede mortrr Praktikant
01. april 2003 - 23:44 #10
Hvis der ikke er nogle matches, så sættes resultatet af funktionen ikke til noget.

Function AutoLink(Streng)
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True

regEx.Pattern = "(www.|http://|ftp://)[\w\?\=\-\%\.\@\&\/\~]+"
Set Matches = regEx.Execute(Streng)
For Each Match in Matches
    strMatch = Match.Value
    If Left(LCase(Match.Value), 7) = "http://" Or Left(Lcase(Match.Value), 6) = "ftp://" Then
        Streng = Replace(Streng, Match.Value, "<a href='" & Match.Value & "' target='_blank' class='tekst'>" & LCase(strMatch) & "</a>")
    Else
        Streng = Replace(Streng, Match.Value, "<a href='http://" & Match.Value & "' target='_blank' class='tekst'>" & LCase(strMatch) & "</a>")
    End If
Next
AutoLink=Streng
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester