edebroMedlem sedan aug. 2001261 inlägg Jag har denna koden:
' funktionerna som ska fixa formateringen på texten och länkar
Function formatText(arg)
Dim editText
editText = Server.HTMLEncode(arg)
If Len(editText) = 0 Then
formatText = editText
Exit Function
End If
Dim objRegExp
Set objRegExp = New RegExp
' länkarna, både www, [url]http://[/url] och e-mail länkar(@)
Dim strBuf
Dim objMatches, objMatch
Dim Value, ReplaceValue, iStart, iEnd
strBuf = ""
iStart = 1
iEnd = 1
objRegExp.Pattern = "\b(www|[url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|\S+@)\S+\b" ' Sökmönster
objRegExp.IgnoreCase = True ' Slå av Case Sensetive
objRegExp.Global = True ' Så att den söker många gånger
Set objMatches = objRegExp.Execute(editText)
For Each objMatch in objMatches
iEnd = objMatch.FirstIndex
strBuf = strBuf & Mid(editText, iStart, iEnd-iStart+1)
If InStr(1, objMatch.Value, "@") Then
strBuf = strBuf & GetHref(objMatch.Value, "EMAIL", "_blank")
Else
strBuf = strBuf & GetHref(objMatch.Value, "WEB", "_blank")
End If
iStart = iEnd+objMatch.Length+1
Next
strBuf = strBuf & Mid(editText, iStart)
formatText = strBuf
End Function
Function GetHref(url, urlType, Target)
Dim strBuf
If UCase(urlType) = "WEB" Then
If LCase(Left(url, 3)) = "www" Then
strBuf = "<A HREF='http://" & url & "' TARGET='" & Target & "'>" & url & "</A>"
Else
strBuf = "<A HREF='" & url & "' TARGET='" & Target & "'>" & url & "</A>"
End If
ElseIf UCase(urlType) = "EMAIL" Then
strBuf = "<A HREF='mailto:" & url & "' TARGET='" & Target & "'>" & url & "</A>"
End If
GetHref = strBuf
End Function
Som du säkert förstår så översätter den text till länkar i t ex ett forum.
För tillfället länkar den även en sån här länk:
"den här sidan är brahttp://www.server.com"
Jag vill altså att den endast ska länka om tecknet före själva sökmöstret är ett radbryt eller mellanslag
Så här ser ju sökmönstret ut just nu:
objRegExp.Pattern = "\b(www|http://|https://|ftp://|\S+@)\S+\b"
Den som löser detta får 100 kr. Det lovar och svär jag på.
Oerhört tacksam för svar (jag har hållit på mer eller mindre med detta problem i några månader) :/
edebroMedlem sedan aug. 2001261 inlägg Jag ser att ni på webForum har fått till detta på ett bra sätt. Någon administratör kanske kan bidra med sökmönstret som wF använder ;)
PaceMedlem sedan juni 20019 024 inlägg (^|[^""])([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:|file://|[url]telnet://[/url]|[url]gopher://[/url])([\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)
edebroMedlem sedan aug. 2001261 inlägg Pace: Det vill inte fungera. Jag antar att du har kopierat detta sökmönster från något befintligt script och inte bara skrivit det rakt av (om du inte är en hejare på regexp dvs ;)). Har du något färdigt exempel på reguljära uttrycket i sin helhet?
PaceMedlem sedan juni 20019 024 inlägg Japp, det är kopierat & klistrat. När det redan fanns en färdig lösning fann jag ingen anledning att skapa en egen. ;)
Function ParseURLs(TextToParse)
dim f_strText, m_objRxp, LinkTarget
LinkTarget = "_blank"
Set m_objRxp = New RegExp
f_strText = TextToParse
m_objRxp.Pattern="(^|[^""])([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:|file://|[url]telnet://[/url]|[url]gopher://[/url])([\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
f_strText=m_objRxp.Replace(f_strText,"$1<a target=""" & LinkTarget & """ href=""$2$3"">$2$3</a>$4")
m_objRxp.Pattern="(^|[^\w/>])(www\.[\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
f_strText=m_objRxp.Replace(f_strText,"$1<a target=""" & LinkTarget & """ href=""http://$2"">$2</a>$3")
'objRxp.Pattern = "(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)"
m_objRxp.Pattern="(^|[^:>\w])([\w\.]*@[\w\.\-]*\.\w{2,3})(\b|$)"
f_strText=m_objRxp.Replace(f_strText,"$1<a href=""mailto:$2"">$2</a>")
ParseURLs = f_strText
End Function
Tror den är från emissions wFparser.
edebroMedlem sedan aug. 2001261 inlägg Pace: tack som faan. Det ser ut att fungera skitbra. Och nu får jag det i en enda funktion också, ist för två som förut.
Skicka din adress till mikael@edebro.net så ska jag skicka din belöning. :birp
edebroMedlem sedan aug. 2001261 inlägg Okej, jag förhastade mig lite. Den fungerade inte alls perfekt. Ta en titt på följande script som jag pillade ihop för att se om det fungerade:
<%
Function ParseURLs(TextToParse)
dim f_strText, m_objRxp
Set m_objRxp = New RegExp
f_strText = TextToParse
m_objRxp.Pattern="(^|[^""])([url]http://[/url]|[url]https://[/url]|[url]ftp://[/url]|mailto:|file://|[url]telnet://[/url]|[url]gopher://[/url])([\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
f_strText=m_objRxp.Replace(f_strText, "$1<a href=""$2$3"">$2$3</a>$4")
m_objRxp.Pattern="(^|[^\w/>])(www\.[\w/#~:.,?+=&%@!\-]*?)([\s.:?\-]*[^\w/#~:.,?+=&%@!\-]|$)"
f_strText=m_objRxp.Replace(f_strText, "$1<a href=""http://$2"">$2</a>$3")
'objRxp.Pattern = "(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)"
m_objRxp.Pattern="(^|[^:>\w])([\w\.]*@[\w\.\-]*\.\w{2,3})(\b|$)"
f_strText=m_objRxp.Replace(f_strText, "$1<a href=""mailto:$2"">$2</a>")
ParseURLs = f_strText
End Function
%>
<HTML>
<BODY>
<% If Len(Request.Form("message")) = 0 Then %>
<FORM NAME="testLinks" ACTION="convertLinks.asp" METHOD="POST">
<TEXTAREA NAME="message" COLS=100 ROWS=20></TEXTAREA><BR>
<INPUT TYPE="submit">
</FORM>
<% Else %>
<%= ParseURLs(Request.Form("message")) %>
<% End If %>
</BODY>
</HTML>
Om ni inte orkar prova scriptet så kan jag meddela att den inte byter ut till länkar om man t ex har en sån här text:
"jag heter mikael, du kan maila till mig på mikael@edebro.net"
Den verkar bara länka om det är ett radbryt före själva länktexten.
Och eftersom jag inte kan regular expressions så bra så är det svårt att modifiera det där avancerade sökmönstret.