Avatar billede krogstrup Nybegynder
24. januar 2005 - 13:02 Der er 6 kommentarer og
1 løsning

regular expression til at "fange" url´er samt email adresser

Hej

ligger nogen inde med en regular expression som kan lave url´er og emails om til links ?

I må meget gerne også vise et eksempel på hvorledes man indlæser det "oversatte" indhold i en ny variabel - altså hvordan man i praksis benytter en sådan regular expression.

På forhånd tak :-)
Avatar billede goose Nybegynder
24. januar 2005 - 13:09 #1
Jeg plejer at bruge den her:

' *************************************
' LAVER LINKS OM TIL KLIKBARE LINKS
' *************************************

function makeLink(str)
    '*** Make the reqular expr object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True

    '***Make html links
    objRegExp.Pattern = "(\bhttp\:\/\/)?(\bw{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "<a href="&chr(34)&"http://$2$3$4"&chr(34)&" target='_blank'>$1$2$3$4</a>")

    '***Make html mailto
    objRegExp.Pattern = "(\S+@{1}\S+\.[a-z][a-z]+\b)"
    str = objRegExp.Replace(str, "<a href="&chr(34)&"mailto:$1"&chr(34)&">$1</a>")
    Set objRegExp = Nothing
    makelink = str
end function

og så kalder jeg den f.eks. ved et udtræk fra databasen:

tekst = makelink(rs("tekst"))
response.write tekst

/Goose
Avatar billede steen_hansen Forsker
24. januar 2005 - 13:11 #2
Function FormatText(strHTML)

    Dim str
    str = Server.HTMLEncode(strHTML)

    'Make the regular expr. object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    'objRegExp.Multiline = True

    'Replace trailing spaces with "&nbsp;"
    objRegExp.Pattern = "(\s) "
    str = objRegExp.Replace(str,"$1&nbsp;")

    'Link automatic converter:
    objRegExp.Pattern = "(\bhttp\:\/\/)?(\bw{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "<a target='_blank' href='http://$2$3$4'>$1$2$3$4</a>")

    'Mail automatic converter:
    objRegExp.Pattern = "(\S+@{1}\S+\.[a-z][a-z]+\b)"
    str = objRegExp.Replace(str, "<a target='_blank' href='mailto:$1'>$1</a>")

    Set objRegExp = Nothing

    FormatText = Replace(str,vbNewLine,"<br>")

End Function

<%=FormatText(RS("text"))%>

Alle e-mails og URL's fra RS("text") bliver omdannet til sktive links og e-mails. Desuden er der også linieskift med :)
Avatar billede steen_hansen Forsker
24. januar 2005 - 13:12 #3
<%%> skal jo med :)

<%
Function FormatText(strHTML)

    Dim str
    str = Server.HTMLEncode(strHTML)

    'Make the regular expr. object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    'objRegExp.Multiline = True

    'Replace trailing spaces with "&nbsp;"
    objRegExp.Pattern = "(\s) "
    str = objRegExp.Replace(str,"$1&nbsp;")

    'Link automatic converter:
    objRegExp.Pattern = "(\bhttp\:\/\/)?(\bw{3}\.\S+\.[a-z][a-z]+\b)(\/\S+\b)?(\?\S+\b)?"
    str = objRegExp.Replace(str, "<a target='_blank' href='http://$2$3$4'>$1$2$3$4</a>")

    'Mail automatic converter:
    objRegExp.Pattern = "(\S+@{1}\S+\.[a-z][a-z]+\b)"
    str = objRegExp.Replace(str, "<a target='_blank' href='mailto:$1'>$1</a>")

    Set objRegExp = Nothing

    FormatText = Replace(str,vbNewLine,"<br>")

End Function
%>

<%=FormatText(RS("text"))%>
Avatar billede fennec Nybegynder
24. januar 2005 - 13:16 #4
Jeg smider lige min også :o)

<%
Function LinkString(strInput)
dim arrPattern, arrReplaceString, Rx, intIndex
  arrPattern = Array("([\w\._-]+@[\w\._-]+\.[A-Za-z]{2,4}\S*)", _
  "(http|https|ftp)(:\/\/[\w\._-]+\.[\w\._-]+\S*)", _
  "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,4}\S*)")

  arrReplaceString = Array(" <a href='mailto:$1'>$1</a> ", _
  " <a href='$1$2' target='_blank'>$1$2</a> ", _
  " <a href='http://$2' target='_blank'>$2</a> ")

  Set Rx = New RegExp
  Rx.Global = True
  Rx.IgnoreCase = True
  For intIndex = 0 To UBound(arrPattern)
    Rx.Pattern = arrPattern(intIndex)
    strInput = Rx.Replace(strInput, arrReplaceString(intIndex))
  Next
  Set Rx = Nothing
  LinkString = strInput
End Function

response.write LinkString("Her er en tekst med link www.test.dk http://www.test.dk og en email en@mail.dk")
%>
Avatar billede krogstrup Nybegynder
24. januar 2005 - 13:23 #5
super lækkert - har ikke lige fået testet endnu....

Virker udtrykkene også hvis bruger undlader http://

altså på f.eks.

www.jubii.dk
Avatar billede fennec Nybegynder
24. januar 2005 - 13:25 #6
Min gør i hvert fald. Den virker også ved https:// og ftp://
Avatar billede krogstrup Nybegynder
24. januar 2005 - 13:30 #7
hej igen

Tak for jeres input - jeg valgte at benytte goose´s funktion.

Hilsen David
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