Avatar billede robson Nybegynder
17. marts 2008 - 10:54 Der er 12 kommentarer og
1 løsning

Find e-mail adresse i tekst og erstat med anden tekst

Jeg har brug for en funktion der modtager en tekst og løber denne igennem og finder alle forekomster af email adresser, fx <a href="mailto:test@mail.dk">Noget tekst</a>.

Dvs. alt imellem <a href="mailto:  og  </a>  kan være hvad som helst!

Funktionen skal returnere e-mail adressen der står lige efter mailto:

Jeg HAR kigget lidt på regular expressions da jeg mener at det vil kunne klare jobbet - HVIS man kender til syntaksen i RegExp, og det gør jeg desværre ikke...

Håber at der er en Ekspert der kan klare det!?
Avatar billede nielle Nybegynder
17. marts 2008 - 11:54 #1
Hvad vil du så have det lavet om til?
Avatar billede robson Nybegynder
17. marts 2008 - 12:05 #2
Lige nu vil jeg bare gerne have funktionen til at returnere e-mail adressen!
Herefter skal jeg have "pakke" adressen ind i noget javascript mht. at skjule e-mailen for spam-robotter.

Lige nu er det dog ovennævnte RegExp der volder problemer!
Avatar billede nielle Nybegynder
17. marts 2008 - 12:25 #3
Denne regexp:

<a href="mailto:(.*?)">.*?</a>

burde kunne fange emailadressen som variablen $1
Avatar billede robson Nybegynder
17. marts 2008 - 13:09 #4
Hej nielle - Det ser lovende ud, men hvordan trækker jeg værdien af $1 ud?

Fx. virker følgende jo ikke
dim sVar
sVar = $1

og følgende giver mig hele teksten
sVar = objRegExp.Replace(sMinText, "$1")
Avatar billede robson Nybegynder
17. marts 2008 - 13:12 #5
Lige nu ser min funktion således ud:

Function TextConv(sText)
    Dim objRegExp
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "<a href=""mailto:(.*?)"">(.*?)</a>"
    sText = objRegExp.Replace(sText, "###$1###$2###")
    Set objRegExp = Nothing
    TextConv = sText
End Function

Jeg har tilføjet en parentes mere således at jeg også kan arbejde med $2 og jeg smider en stribe # ind for at teste.
Avatar billede nielle Nybegynder
17. marts 2008 - 13:15 #6
Man bruger $1 når man skal lave en replace direkte i teksten ... ikke til at trække ud med på den viste måde. Det du viser vil nu heller ikke give dig hele _teksten_ ... f.eks. vil email adresse ikke mere være et link bagefter.

Hvis du vil have email addressen ud på noget i stil med den viste måde, så vil jeg indledningsvis spørge dig om hvad der så skal ske hvis der er mere end een email adresse i teksten?
Avatar billede robson Nybegynder
17. marts 2008 - 13:34 #7
ok - den måde jeg viser eksemplet på vil aldrig virke - det ser jeg nu. Alle email forekomster skal have samme behandling, det er mig der ikke er helt dus med hvordan RegExp fungere...

Jeg ville trække hver e-mail ud til senere behandling, men istedet kunne jeg lige så godt gøre det med det samme i funktionen - det kræver dog lidt mere regexp (tror jeg) fordi selve email adressen OGSÅ skal splittes op.

Ex. kunne være
sText = objRegExp.Replace(sText,"<script language=""JavaScript""><!--"&_
"    var name = ""$1"";"&_
"    var domain = ""$2"";"&_
"    document.write('<a href=\""mailto:' + name + '@' + domain + '\"">');"&_
"    document.write('$3</a>');"&_
"// --></script>")

Hvor $1 email FØR @
$2 er domæne
$3 er teksten imellem <a og </a>
Avatar billede nielle Nybegynder
17. marts 2008 - 14:34 #8
Nok noget i denne stil:

Function TextConv(sText)
    Dim objRegExp

    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "<a href=""mailto:([^@]+)@(.*?)"">(.*?)</a>"

    replaceWith = "<script language=""JavaScript""><!--" & vbCrLf & _
        "var name = ""$1"";" & vbCrLf & _
        "var domain = ""$2"";" & vbCrLf & _
        "document.write('<a href=\""mailto:' + name + '@' + domain + '\"">');" & vbCrLf & _
        "document.write('$3</a>');" & vbCrLf & _
        "// --></script>")

    sText = objRegExp.Replace(sText, replaceWith)

    Set objRegExp = Nothing

    TextConv = sText
End Function
Avatar billede robson Nybegynder
17. marts 2008 - 16:01 #9
det er super! Det virker helt efter hensigten! :)

Smider du ikke lige et svar så du kan få nogle velfortjente points - tak for hjælpen!!
Avatar billede nielle Nybegynder
17. marts 2008 - 17:50 #10
Svar :^)
Avatar billede nielle Nybegynder
17. marts 2008 - 17:55 #11
Hvis du i øvrigt er interesseret i at lære mere om regulære udtryk, så vil jeg da gerne pege dig forbi den første af mine artikler om emnet:

http://www.eksperten.dk/artikler/1156
Avatar billede robson Nybegynder
18. marts 2008 - 08:08 #12
Super - det er jeg naturligvis meget interessert i :) Tak for linket!
Avatar billede nielle Nybegynder
18. marts 2008 - 08:13 #13
Takker for point ... og god læselyst.
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