17. marts 2008 - 10:54Der 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...
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!
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.
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?
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>
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.