Problemet er at hvis man trykker på enter lige efter man har skrevet et link i en tekst, kommer linket til at se sådan ud: <a href="www.bt.dk<br>/">www.bt.dk</a>
hvad kan man gøre for at løse det problem?? (altså så <br> ikke kommer ind i href)
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
hmm ja det virker hvis brugeren kun trykker på enter én gang, men problemet er så at hvis brugeren trykker enter to eller flere gange, så kommer <br> stadig ind i href
Hmm, jeg tror at det måske er Server.HTMLEncode() som kan finde på at omdanne linjeskift til <br>-tags. Desværre har jeg ikke lige et ASP-system som er oppe og som jeg kan afprøve det på.
Prøv derfor selv med følgende lille demo:
<form> Skriv noget med nogle linjeskift:<br> <textarea name="nyhed"></textarea> <input type="submit"> </form>
Check med vis kilde efter at du har submittet;<br> <% Response.Write Server.HTMLEncode(Request.Form("nyhed")) %>
når jeg skriver en tekst i ovenstående tekstboks skrives det ens hvad enten htmlencode er slået til eller ej. Teksten skrives bare. Men det er nok fordi at en tekstboks benytter vbCrLf istedet for <br> til linjeskift, og derfor har htmlencode ingen indflydelse.
jeg har prøvet i det oprindelige script at slå htmlencode fra og til men det gør ingen forskel. Fejlen opstår kun når jeg benytter flg stump kode inden det udskrives: a8= Replace(varTekst, vbCrLf, "<br>")
og udskriver med: <%=LinkString2(a8)%>
...men hvis jeg ikke benytter koden får jeg ingen linjeskift i teksten....så det er lidt et problem
Hmm? Det virkede da hvis der kun var et enkelt linjeskift (25/06-2006 17:57:42). Koden i 27/06-2006 18:43:04 burde bare loope igennem indtil at den havde taget hånd om samtlige linjeskift.
hvis man trykker på enter én gang efter linjeskift så bliver linjeskiftet ikke vist, men hvis man trykker to gange på enter, så bliver det vist som et enkelt linjeskift
....det virker som om loopet ikke rigtig gør noget af en eller anden grund
....men kan man istedet lave det på en helt anden måde, end den jeg benytter?? der må vel være massere af andre websteder der bruger noget lignende...men måske lidt smartere??
ingen ændring desværre... har desuden fjernet htmlencode for at være helt sikker på det ikke er noget med det. så den senste udgave der ligger der ude nu er:
når du ser teksten i textarea kan du se at der er trykket på enter et par gange efter linket i "nyheden" så teksten skulle stå et par linjer længere nede....men den vises på samme linje som linket når den udskrives
den ignorere altså linjeskift lige efter et link...af en eller anden grund??
hmmm næ nu er problemet at hvis man trykker på enter 1 gang lige foran et link i teksten så laver den ikke linjeskift....først hvis man trykker på enter to gange får man et enkelt linjeskift....har du et bud på hvorfor?
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[^\s]*)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "\b(?<!http://)(www\.[^\s]*)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
Ah ja, VB Script kan ikke håndtere negativ lookbehind.
Ret til dette:
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "(^|[^/])(www\.[^\s]*)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1<a class='tabletekst3' href='http://$2' target='_blank'>$2</a>") End With Set objRegExpHTTP2 = Nothing
> ...men hvorfor er den bedre end den gamle funktion
Det er det vel heller ikke nødvendigvis. Det er jo lidt en subjektiv vurdering.
Min mening er dog at det er mere kompakt og dermed lettere at læse. Hvis eageleye kommer forbi, så kan han måske argumentere hvorfor hans er bedere.
den virker nu...men den har en mangel i forhold til den gamle... hvis man f.eks. skriver et link og f.eks. sætter et komma efter, tager den kommaet med i linket.
...men havde du en bedre måde at lave alt det der formattering af teksten med fed osv? :)
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[^\s]+)\.[a-z]{2,}" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "\b(?<!http://)(www\.[^\s]+)\.[a-z]{2,}" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[^\s]+\.[a-z]{2,})" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "\b(?<!http://)(www\.[^\s]+\.[a-z]{2,})" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
Formatering med fed og kursiv. Well, din kode virker jo så hvorfor lave den om?
Men det kan da sagtens laves med regulære udtryk:
varTekst = rs("nyhed")
' Var dette: ' c1=replace(varTekst,"<fed>","<b>",1,-1,1) ' c2=replace(c1,"</fed>","</b>",1,-1,1)
Set objRegExpHTTP1 = New RegExp With objRegExpFed .Pattern = "<fed>(.+?)</fed>" .Global = True .IgnoreCase = True varTekst = .Replace(varTekst, "<b>$1</b>") End With Set objRegExpFed = Nothing
' Var dette: ' c3=replace(c2,"<kursiv>","<i>",1,-1,1) ' c4=replace(c3,"</kursiv>","</i>",1,-1,1)
Set objRegExpHTTP1 = New RegExp With objRegExpKursiv .Pattern = "<kursiv>(.+?)</kursiv>" .Global = True .IgnoreCase = True varTekst = .Replace(varTekst, "<i>$1</i>") End With Set objRegExpKursiv = Nothing
hvad er det egentlig følgende gør i den oprindelige linkString funktion: objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])('>)" strOutput = objRegExpHTTP2.Replace(strOutput, "$2") objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(' target=)" strOutput = objRegExpHTTP2.Replace(strOutput, "$2") objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(</a>)" strOutput = objRegExpHTTP2.Replace(strOutput, "$2$1")
Kom åbenbart til at tage udgangspunkt i den version af koden som ikke virkede:
Sådan:
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "(^|[^/])(www\.[^\s]+\.[a-z]{2,})" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
- leder efter en "<br>", eller et af tegnene "," "." ")" "]" "}", efterfulgt af "'>" og erstatter det med "'>" - dvs. den fjerner simpelthen den første del.
- leder efter en "<br>", eller et af tegnene "," "." ")" "]" "}", efterfulgt af "' target=" og erstatter det med "' target=" - dvs. den fjerner det foran.
jo men jeg tænkte på om det ikke er derfor at den tog <br> med ind i href til at starte med?
lige en sidste lille ting til din regExp: kan du lave den sådan så den ikke laver et link hvis der er mindre end eller mere end tre w? men den skal stadig acceptere f.eks www2.dr.dk
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[^\s]+\.[a-z]{2,}(?:\?[a-z0-9%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "(^|[^/])(www\.[^\s]+\.[a-z]{2,}(?:\?[a-z0-9%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[^\s]+\.[a-z]{2,}(?:\?[a-z0-9%&+=#]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "(^|[^/])(www\.[^\s]+\.[a-z]{2,}(?:\?[a-z0-9%&+=#]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
LinkString2 = strOutput End Function
> heh nu sætter den ";" ind efter "&"
Forståer jeg ikke. Prøv lige at forklare.
> og medtager ikke linket efter "&"
Det burde den nu ellers. Kan du give et eksempel hvor det fejler?
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[^\s]+\.[a-z]{2,}(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "(^|[^/])(www\.[^\s]+\.[a-z]{2,}(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
man kan stadig oprette med mere eller mindre end WWW - altså f.eks: w.dr.dk eller wwwt.dr.dk (men det må gerne kunne se sådan ud ex: www2.dr.dk) links bliver klikbare selvom der mere end to // efter http - altså: http:///www.dr.dk
...det sidste her er ikke så vigtigt....men det ville gøre det perfekt : )
- men jeg kan fortælle at det intet som helt har med min kode at gøre. Der er intet i den som kan indsætte et ;-tegn. Du må have noget mere kode et eller andet sted som haver ged i den.
Jeg kan ikke klare sådan noget som "w.dr.dk" for dig, måske sådan noget som "wwwt.dr.dk", men så er spørgsmålet hvornår noget uden et http:// foran er et link eller hvornår nogen bare har glemt at skrive et mellemtum efter et punktum.hmm?
Function LinkString2(strInput) Set objRegExpHTTP1 = New RegExp With objRegExpHTTP1 .Pattern = "\b(https?|ftp)(://[\w.-]+\.[a-z]{2,}(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "<a class='tabletekst3' href='$1$2' target='_blank'>$1$2</a>") End With Set objRegExpHTTP1 = Nothing
Set objRegExpHTTP2 = New RegExp With objRegExpHTTP2 .Pattern = "(^|[^\w/])(www\.[\w.-]+\.[a-z]{2,}(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='http://$1' target='_blank'>$1</a>") End With Set objRegExpHTTP2 = Nothing
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
ja nu virker & tegnet men den vil ikke vise links der starter med www. og den laver ikke links klikbare efter en / i linket.
hvis jeg fjerner flg fra den oprindelige LinkString funktion virker den faktisk uden at sætte <br> ind i href:
objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])('>)" strOutput = objRegExpHTTP2.Replace(strOutput, "$2") objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(' target=)" strOutput = objRegExpHTTP2.Replace(strOutput, "$2") objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(</a>)" strOutput = objRegExpHTTP2.Replace(strOutput, "$2$1") ...men den medtager et komma i linket hvis det står lige efter, hvordan skal pattern se ud for at den ikke gør det (altså i den oprindelige linkString funktion)?
> hvis jeg fjerner flg fra den oprindelige LinkString funktion virker den faktisk uden at sætte <br> ind i href:
Meget underligt... Som sagt, 29/06-2006 20:42:59, så gør de faktisk det at de fjerner "<br>"er fra koden. Hvis du derfor fjerner dem, så burde der faktisk komme flere "<br>"er - ikke færre.
> ...men den medtager et komma i linket hvis det står lige efter, hvordan skal pattern se ud for at den ikke gør det (altså i den oprindelige linkString funktion)?
Ja det gør den, for en af funktionerne af koden er netop at fjerne vildfarne ,'er og andre lignende tegn.
Egentlig var det en uheldig løsning, for den slettede simpelthen de ,'er og .'er helt. Men dem som poster hos dig havde jo sat de tegn der med et formål.
.oOo.
Når jeg nu kigger på kodeeksemplerne fra i går kan jeg se massere af små fejl hist og her. Desværre kan små fejl have stor betydning. Derfor skal man heller ikke arbejde med regex'er når man er træt. Jeg må have været temmeligt træt i går ... beklager og undskylder din ulejlighed! :^|
Jeg synes imidlertid ikke at vi skal smide mine forsøg helt væk og gå tilbage til det du startede med. Der er faktisk også fejl i det, og desuden har du nævnt nogle ønsker undervejs som det heller ikke kan opfylde.
.oOo.
I mellemtiden har jeg så langt hovedet i blød og jeg har nu en løsning som bl.a. kan klare:
"ifølge DMI's url (www.dmi.dk) vil det blive rigtigt godt vejr imorgen"
- hvor den oprindelige løsning simpelthen slettede parenteserne.
Den kan klare . og , og ! og lignende bag et url. De bliver ikke slettet, men de kommer heller ikke indenfor i urlet. De står simpelthen på deres rigtige plads i teksten.
Og selvfølgelig kan den klare # og ? og & i et url.
Alt i alt synes jeg at den er meget mere alsidig end den oprindelige løsning.
Der er ikke nogen garanti for at der ikke stadig er fejl, men lad os kigge på dem en ad gangen:
Function LinkString2(strInput) ' Find *alt* hvad der på nogen måde ligner et url og sæt "http://" foran:
Set trin1 = New RegExp With trin1 .Pattern = "((?:[\w-]+\.){2,}[a-z]{2,}(:?/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "http://$1") End With Set trin1 = Nothing
' Fjern det ekstra "http://" fra de steder hvor der nu er dobbelt:
Set trin2 = New RegExp With trin2 .Pattern = "((?:https?|ftp)://)http://" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1") End With Set trin2 = Nothing
' Lav et link ud af det:
Set trin3 = New RegExp With trin3 .Pattern = "((?:https?|ftp)://(?:[\w-]+\.){2,}[a-z]{2,}(:?/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='$1' target='_blank'>$1</a>") End With Set trin3 = Nothing
' Lav mails om til links:
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
Function LinkString2(strInput) ' Find *alt* hvad der på nogen måde ligner et url og sæt "http://" foran:
Set trin1 = New RegExp With trin1 .Pattern = "((?:[\w-]+\.){2,}[a-z]{2,}(?:/[\w-]+\.[\w-]+|/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "http://$1") End With Set trin1 = Nothing
' Fjern det ekstra "http://" fra de steder hvor der nu er dobbelt:
Set trin2 = New RegExp With trin2 .Pattern = "((?:https?|ftp)://)http://" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1") End With Set trin2 = Nothing
' Lav et link ud af det:
Set trin3 = New RegExp With trin3 .Pattern = "((?:https?|ftp)://(?:[\w-]+\.)+[a-z]{2,}(?:/[\w-]+\.[\w-]+|/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='$1' target='_blank'>$1</a>") End With Set trin3 = Nothing
' Lav mails om til links:
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
- og den klare fint de situationer hvor folk simpelthen har glemt et mellemrum efter et punktum.Som dette eksempel viser.De ville jo blive lavet om til klikbare "ting" hvis jeg slækkede på kravene og kun krævede et enkelt punktum.På den anden side sker det vel ikke så tit, og derfor kan nogle enkelte svipsere måske tolereres... Hvad synes du?
Den sidste ting, den med at folk staver http forkert, er mere tricky end jeg havde regnet med...
Det eneste "pilleri" der er, er at den måske ikke burde lave links ud af eks. wwwet.test.dk og når http:// bliver stavet forkert ser det lidt sjovt ud.
Hvorfor bør den ikke lave link ud af wwwet.test.dk? Hvad er det afgørende kriterie når den nu samtidig skal kunne lave links af w.dr.dk, wwwt.dr.dk og www2.dr.dk?
det har IKKE være meningen at den skulle kunne lave link af w.dr.dk eller wwwt.dr.dk eller wwwwwww.dr.dk men gerne www2.dr.dk (altså med et tal) ...kan godt være jeg ikke har skrevet det helt tydeligt før
Men, inden at jeg gør det (og det bliver i øvrigt først i morgen), vil jeg gerne påpege at det bliver mere og mere almindeligt at url's ikke nødvendigvis starter med www. Så er du helt sikker på at du ønsker den afgrænsning?
altså du må da gerne lave det, men det er ikke en nødvendighed : )
tænkte bare at det måske kunne give nogle komplikationer. Ex. hvis man glemmer et mellemrum efter et punktum i en tekst:
Hej bla bla.De nye bla.......
Så vil den vel fortolke bla.De som et link, hvilket ikke vil være så godt. ...så tror måske det vil blive det bedste resultat hvis den kun fortolker tekst der starter met www. , http:// , http:// eller ftp: som et link
Vi må vist nok hellere holde os til kravet om at der skal være minimum 2 punktummer. I hvertfald kan jeg ikke stille med en løsning som sørger for ikke at linkificere "Hej bla bla.De nye bla......." samtidig med at den laver et link ud af "eksperten.dk" og lignende.
Det sidste irritationsmoment, den med de forkert svaede "httx://" foran linkene, kan så vidt jeg har kunne afprøve klares med denne:
Function LinkString2(strInput) ' Find *alt* hvad der på nogen måde ligner et url og sæt "http://" foran:
Set trin1 = New RegExp With trin1 .Pattern = "((?:[\w-]+\.){2,}[a-z]{2,}(?:/[\w-]+\.[\w-]+|/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "http://$1") End With Set trin1 = Nothing
' Fjern det ekstra "http://" fra de steder hvor der nu er dobbelt:
Set trin2 = New RegExp With trin2 .Pattern = "((?:https?|ftp)://)http://" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1") End With Set trin2 = Nothing
' Lav et link ud af det:
Set trin3 = New RegExp With trin3 .Pattern = "((?:https?|ftp)://(?:[\w-]+\.)+[a-z]{2,}(?:/[\w-]+\.[\w-]+|/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='$1' target='_blank'>$1</a>") End With Set trin3 = Nothing
' Fjern alle forekomster af "3-5 bogstaver + ://" som står uden for et link:
Set trin4 = New RegExp With trin4 .Pattern = "(^| )[a-z]{3,5}://" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1") End With Set trin4 = Nothing
' Lav mails om til links:
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
Personligt ville jeg foretrække at man laver links ud af w.dr.dk, wwwt.dr.dk, wwwwwww.dr.dk og www2.dr.dk. De kunne nemlig sagtens være fuldt lovlige links.
Men hvis du vil have en løsning som ikke laver linkes if af w.dr.dk, wwwt.dr.dk eller wwwwwww.dr.dk, men gør det med www2.dr.dk og www.dr.dk så kunne løsninge se sådan her ud:
Function LinkString2(strInput) ' Find *alt* hvad der på nogen måde ligner et url og sæt "http://" foran:
Set trin1 = New RegExp With trin1 .Pattern = "(^| )((?:www\d?\.)(?:[\w-]+\.)+[a-z]{2,}(?:/[\w-]+\.[\w-]+|/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strInput, "$1http://$2") End With Set trin1 = Nothing
' Fjern det ekstra "http://" fra de steder hvor der nu er dobbelt:
Set trin2 = New RegExp With trin2 .Pattern = "((?:https?|ftp)://)http://" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1") End With Set trin2 = Nothing
' Lav et link ud af det:
Set trin3 = New RegExp With trin3 .Pattern = "((?:https?|ftp)://(?:[\w-]+\.)+[a-z]{2,}(?:/[\w-]+\.[\w-]+|/[\w-]*)*(?:#\w+)?(?:\?[\w%&+=]+)?)" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='$1' target='_blank'>$1</a>") End With Set trin3 = Nothing
' Fjern alle forekomster af "3-5 bogstaver + ://" som står uden for et link:
Set trin4 = New RegExp With trin4 .Pattern = "(^| )[a-z]{3,5}://" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "$1") End With Set trin4 = Nothing
' Lav mails om til links:
Set objRegExpEMail = New RegExp With objRegExpEMail .Pattern = "\b([a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,})\b" .Global = True .IgnoreCase = True strOutput = .Replace(strOutput, "<a class='tabletekst3' href='mailto:$1'>$1</a>") End With Set objRegExpEMail = Nothing
LinkString2 = strOutput End Function
Men som sagt foretrækker jeg løsningen fra 02/07-2006 19:14:11.
jeg tænkte på i din sidste version kan man lave sådan så den ikke skriver http:// foran et link en bruger har skrevet hvis det ikke er skrevet i forvejen, eller vil det være besværligt at lave?
Hvis "ja", så må jeg indrømme at det faktisk er lidt vanskeligt. Det kræver i hvert fald en stortset helt omskrevet løsning (i modsætning til bare en lille ændring). Jeg tror dog nok at det kan lade sig gøre.
Men, hvis du er meget interesseret, vil jeg da gerne gøre forsøget?
...lyder som om du er blevet lidt grebet af det ;-)
Synes godt om
Ny brugerNybegynder
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.