Implemetación de validación de direcciones de Url usando el paquete Regexp de Go
Para que una URL sea válida según un algoritmo sencillo, podemos considerar las siguientes características clave:
-
Formato Correcto: La URL debe seguir el formato estándar, por ejemplo,
http://www.example.com. Esto incluye el protocolo (http, https), el nombre de dominio, y opcionalmente una ruta y parámetros. -
Protocolo: Verificar que la URL comience con
http://ohttps://. -
Nombre de Dominio: Asegurarse de que el dominio contenga caracteres válidos (letras, números, guiones) y termine con una extensión de dominio válida (.com, .net, .org, etc.).
-
Longitud: Comprobar que la longitud de la URL no exceda un límite razonable (por ejemplo, 2048 caracteres).
-
Codificación de Caracteres: Verificar que los caracteres especiales en la URL estén debidamente codificados (%20 para un espacio, etc.).
-
Sintaxis: Asegurarse de que no haya errores de sintaxis como espacios no codificados o caracteres no permitidos.
Aquí tienes un pseudocódigo sencillo para verificar estos puntos:
package main
import (
"fmt"
"net/url"
"regexp"
)
func isValidURL(u string) bool {
// Verificar la longitud
if len(u) > 2048 {
return false
}
// Parsear la URL
parsedURL, err := url.Parse(u)
if err != nil || parsedURL.Scheme == "" || parsedURL.Host == "" {
return false
}
// Verificar el protocolo
if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" {
return false
}
// Verificar el nombre de dominio (contiene letras, números, y guiones)
domainPattern := `^[a-zA-Z0-9-]+\.[a-zA-Z]{2,}$`
match, _ := regexp.MatchString(domainPattern, parsedURL.Host)
if !match {
return false
}
return true
}
func main() {
urls := []string{
"http://www.example.com",
"https://valid-url.org",
"ftp://invalid-protocol.com",
"http://invalid domain.com",
"http://toolong" + string(make([]byte, 2049)) + ".com",
}
for _, u := range urls {
fmt.Printf("URL: %s is valid: %v\n", u, isValidURL(u))
}
}
Este código en Go verifica la longitud de la URL, el protocolo, y el formato del nombre de dominio. Si una URL no cumple con estos criterios, se considera inválida.