Imports System.Text.RegularExpressions Public Class UrlDetector '// Lista de protocolos compatibles Private Shared ReadOnly Protocols As String = "https?|ftps?|sftp|file|mailto|data|rtsp|rtmp|mms|jdbc|telnet|ssh|ws|wss|svn|git|vnc|irc|sip|bitcoin|ethereum|magnet|news|nntp|ldap" '// Patrón de nombres de dominio Private Shared ReadOnly DomainPattern As String = "(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}" '// Patrón para direcciones IPv4 Private Shared ReadOnly IPv4Pattern As String = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" '// Patrón para direcciones IPv6 Private Shared ReadOnly IPv6Pattern As String = "\[(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\]" '// Patrón para localhost Private Shared ReadOnly LocalhostPattern As String = "localhost" '// Número de puerto y ruta opcionales Private Shared ReadOnly PortAndPathPattern As String = "(?::\d{1,5})?(?:/\S*)?" '// Compilar los patrones regex para mejorar el rendimiento Private Shared ReadOnly UrlContainsRegex As New Regex( $"({Protocols})://(?:{DomainPattern}|{IPv4Pattern}|{IPv6Pattern}|{LocalhostPattern}){PortAndPathPattern}", RegexOptions.Compiled Or RegexOptions.IgnoreCase) Private Shared ReadOnly UrlIsRegex As New Regex( $"^({Protocols})://(?:{DomainPattern}|{IPv4Pattern}|{IPv6Pattern}|{LocalhostPattern}){PortAndPathPattern}$", RegexOptions.Compiled Or RegexOptions.IgnoreCase) ''' ''' Determina si el mensaje dado contiene una URL. ''' ''' El mensaje a verificar. ''' True si el mensaje contiene una URL, en caso contrario False. Public Shared Function ContainsUrl(message As String) As Boolean If String.IsNullOrWhiteSpace(message) Then Return False End If Return UrlContainsRegex.IsMatch(message) End Function ''' ''' Determina si el mensaje dado es una URL. ''' ''' El mensaje a verificar. ''' True si el mensaje contiene una URL, en caso contrario False. Public Shared Function IsUrl(message As String) As Boolean If String.IsNullOrWhiteSpace(message) Then Return False End If Return UrlIsRegex.IsMatch(message) End Function End Class