¿Alguien tiene una expresión regular buena (preferiblemente probada) para aceptar solo un nombre de host DNS válido, una dirección IPv4 o IPv6?Regex de Java para aceptar un nombre de host válido, dirección IPv4 o IPv6
Respuesta
Entiendo que puede ser forzado para usar un regex. Sin embargo, si es posible, es mejor evitar el uso de expresiones regulares para esta tarea y utilizar una clase de biblioteca Java para realizar la validación.
Si desea hacer la validación y la búsqueda DNS juntas, entonces InetAddress.getByName(String)
es una buena opción. Esto hará frente a DNS, IPv4 e IPv6 de una sola vez, y le devolverá una instancia cuidadosamente envuelta InetAddress
que contiene el nombre DNS (si se proporciona) y la dirección IPv4 o IPv6.
Si solo quiere hacer una validación sintáctica, Apache commons tiene un par de clases que deberían hacer el trabajo: DomainValidator
y InetAddressValidator
.
Guava tiene una nueva clase HostSpecifier. Incluso validará que el nombre de host (si es un nombre de host) termina en un "sufijo público" válido (por ejemplo, ".com", ".co.uk", etc.), basado en el último sufijo público de mozilla lista. ¡Eso es algo que NO querrías intentar con un regex hecho a mano!
No me gustaría confiar en el código que también ha tomado una instantánea de la "última" lista de sufijos públicos, porque un par de meses más tarde no será la última. – Trejkaz
Inspirado por el código que encontré en this post, creé el siguiente método de validador que parece satisfacer bastante bien las necesidades de validación simples. Al leer JavaDoc de URI eliminé algunos falsos positivos como "host: 80" y "hostname/page", pero no puedo garantizar que falten algunos positivos.
public static boolean isValidHostNameSyntax(String candidateHost) {
if (candidateHost.contains("/")) {
return false;
}
try {
// WORKAROUND: add any scheme and port to make the resulting URI valid
return new URI("my://[email protected]" + candidateHost + ":80").getHost() != null;
} catch (URISyntaxException e) {
return false;
}
}
- 1. Validar IPv4, IPv6 y nombre de host
- 2. Función de PHP para validar IPv4 e IPv6 usando regex
- 3. Libcurl: force ipv4 o ipv6
- 4. ¿Cómo puedo convertir la dirección IPV6 a la dirección IPV4?
- 5. Cálculos de red IPv4/IPv6 y validación para Java?
- 6. Cómo convertir una dirección de IPv4 a IPv6
- 7. Nombre de host Regex
- 8. Como apoyar IPv4 y IPv6 en Java
- 9. Problema Convertir ipv6 a ipv4
- 10. Interconversión de IPv6 a IPv4 en C#
- 11. ¿Cómo determinar si una cadena es una dirección IPv4 o IPv6 válida en C#?
- 12. .Net Dirección IP IPv4
- 13. Representación de direcciones IPv4/IPv6 en Oracle
- 14. Aceptar caracteres de nombre internacional en RegEx
- 15. Cómo admitir conexiones IPv4 e IPv6
- 16. Indica si una cadena de texto es una dirección IPv6 o una dirección IPv4 usando sockets C estándar API
- 17. Dirección IP al nombre de host en Java?
- 18. Por qué request.getRemoteAddr() devuelve ipv4 o ipv6 según el contexto (consulta posterior o consulta ajax)
- 19. Comparación del conector IPV4 (sockaddr_in) con el conector IPV6 (sockaddr_in6)
- 20. ¿Cómo obtener la dirección IPv6 en C#?
- 21. Almacenando la dirección IP en la base de datos MySQL (IPv4 e IPv6)
- 22. Definición de la dirección IPv4/IPv6 y el puerto a una estructura sockaddr_storage
- 23. Obtener direcciones IPv4 de Dns.GetHostEntry()
- 24. Guía definitiva para comprender cómo formular una dirección IPv6
- 25. Formato de dirección local de enlace IPv6
- 26. ¿Cuáles son las expresiones regulares de Java para hacer coincidir cadenas de IPv4 e IPv6?
- 27. conversión de una dirección IP a nombre de host
- 28. Tamaño para almacenar direcciones IPv4, IPv6 como una cadena
- 29. Android e IPv6 en Java
- 30. función inet_aton similar para IPv6
¡Gracias, esas clases de Apache deberían hacer el truco! – ljbade
Lamentablemente arroja una excepción simplemente porque un host no existe, no solo cuando el host no es válido. – Trejkaz
@Trejkaz - ¿de qué "está hablando? ¿Has probado el enfoque alternativo también? –