Nuestro equipo especializado pasados algunos días de trabajo y de recopilar de información, obtuvieron la respuesta, queremos que todo este artículo sea de gran utilidad para tu proyecto.
Solución:
Puede usar la biblioteca Guava, específicamente usando el com.google.common.net.InetAddresses
clase, llamando isInetAddress()
.
isInetAddress
public static boolean isInetAddress(String ipString)
Devoluciones true si el suministrado string es una ip valida string literal, false de lo contrario.
Parámetros: ipString
– Cadena a evaluar como una IP string literal
Devoluciones: true
si el argumento es una IP válida string literal
A ver si esto funciona:
try 1[0-9][0-9] catch (PatternSyntaxException ex)
// Syntax error in the regular expression
Compré un programa muy útil llamado RegexMagic hace casi un año para algunas expresiones regulares complicadas que planeaba usar.
Se suponía que esto era Java, por lo que debería compilarse, supongo que /60 puede estar entre los rangos de 0000 y FFFF, puede modificar esa última parte.
/[A-F0-9]0,4 es lo que agregué a la expresión regular para que coincida con su ejemplo.
La biblioteca IPAddress Java admite el análisis de subredes CIDR IPv4 e IPv6 (es decir, dirección/prefix formato) de forma polimórfica. Descargo de responsabilidad: soy el director del proyecto.
El siguiente método es un código de ejemplo para la validación:
static void parse(String str)
IPAddressString addrString = new IPAddressString(str);
try
IPAddress addr = addrString.toAddress();
IPAddress hostAddr = addrString.toHostAddress();
Integer prefix = addr.getNetworkPrefixLength();
if(prefix == null)
System.out.println(addr + " has no prefix length");
else
System.out.println(addr + " has host address " + hostAddr + " and prefix length " + prefix);
catch(AddressStringException e)
System.out.println(addrString + " is invalid: " + e.getMessage());
Usando los ejemplos proporcionados en la pregunta, el resultado del método anterior es:
abcd:ef01:2345:6789:abcd:ef01:2345:6789 has no prefix length
2001:db8::8:800:200c:417a has no prefix length
ff01::101 has no prefix length
::1 has no prefix length
:: has no prefix length
2001:db8::8:800:200c:417a has no prefix length
ff01::101 has no prefix length
::1 has no prefix length
:: has no prefix length
::d01:4403 has no prefix length
::ffff:8190:3426 has no prefix length
::d01:4403 has no prefix length
FFFF:129.144.52.38 is invalid: FFFF:129.144.52.38 IP Address error: address has too few segments
2001:db8:0:cd30::/60 has host address 2001:db8:0:cd30:: and prefix length 60
2001:db8:0:cd30::/60 has host address 2001:db8:0:cd30:: and prefix length 60
2001:db8:0:cd30::/60 has host address 2001:db8:0:cd30:: and prefix length 60
2001:0DB8:0:CD3/60 is invalid: 2001:0DB8:0:CD3/60 IP Address error: address has too few segments
2001:db8::cd30/60 has host address 2001:db8::cd30 and prefix length 60
2001:db8::cd3/60 has host address 2001:db8::cd3 and prefix length 60
Como puede ver, la pregunta era incorrecta acerca de que FFFF:129.144.52.38 era válido y que 2001:db8::cd30/60 y 2001:db8::cd3/60 no eran válidos. El primero seria valido si lo fuera ::FFFF:129.144.52.38
Comentarios y puntuaciones
Nos puedes proteger nuestra ocupación mostrando un comentario y dejando una puntuación te estamos agradecidos.