Si lo pensamos, no es tan difícil realmente, pero bueno, tampoco hay que reinventar la rueda… buscando en google encontré (aquí http://weblogs.asp.net/farazshahkhan/) una expresión regular que detecta una url... la modifiqué un poco para que elimine caracteres al final de la url que probablemente no tengan que ver con el enlace (coma, punto, dado que estamos en una frase)... y además para que abra el enlace en una ventana nueva.
Como siempre, vamos a crear un pequeño ejemplo para testear su capacidad. Este sería el código aspx:
<html> <head> <title>Convertir texto a hyperlink</title> <style type="text/css"> * { font-family: Trebuchet MS; } </style> </head> <body> <form id="form1" runat="server"> <asp:TextBox ID="txtInput" TextMode="MultiLine" Rows="4" Width="100%" Text="hola, este es un texto con urls para testear, como http://www.google.com, y http://es.yahoo.com. y repito http://es.yahoo.com. y también http://asp.net y además ftp ftp://somepath.com " runat="server"></asp:TextBox> <br /> <asp:Button ID="btnConvert" runat="server" Text="Convertir texto a hyperlink" /> <p> <asp:Literal ID="ltConvertedText" runat="server"></asp:Literal> </p> </form> </body> </html>
Ahora, el código VB.NET:
1.- Añadan Imports System.Text.RegularExpressions en la primera fila, y luego:
Protected Sub btnConvert_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnConvert.Click Dim pattern As String = "(http(s)?|ftp)://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?" Dim regex As Regex = New Regex(pattern, RegexOptions.IgnoreCase) Dim matches As MatchCollection = regex.Matches(txtInput.Text) Dim urls As New List(Of ListItem) For i As Integer = 0 To matches.Count - 1 urls.Add(New ListItem(matches(i).Value, UrlClean(matches(i).Value))) Next Dim Input As New StringBuilder(txtInput.Text) For Each url As ListItem In urls Input.Replace(url.Text, String.Format("<a href=""{0}"" target=""_blank"">{1}</a>", url.Value, url.Text)) Next ltConvertedText.Text = Input.ToString End Sub Private Function UrlClean(ByVal url As String) As String If url.EndsWith(",") Or url.EndsWith(".") Then url = url.Remove(url.Length - 1, 1) Return url End Function
Espero que les sea de utilidad ;)
No hay comentarios.:
Publicar un comentario