¿Cómo verificar si la variable contiene un identificador UUID / GUID válido?
Actualmente solo estoy interesado en validar los tipos 1 y 4, pero no debería ser una limitación para sus respuestas.
javascript
regex
validation
uuid
guid
Marek Sebera
fuente
fuente
Respuestas:
Actualmente, los UUID son los especificados en RFC4122. Un caso marginal a menudo descuidado es el UUID NIL, que se indica aquí . La siguiente expresión regular toma esto en cuenta y devolverá una coincidencia para un UUID NIL. Consulte a continuación un UUID que solo acepta UUID no NIL. Ambas soluciones son para las versiones 1 a 5 (ver el primer carácter del tercer bloque).
Por lo tanto, para validar un UUID ...
... asegura que tiene un UUID con formato canónico que es de la Versión 1 a la 5 y es la Variante apropiada según RFC4122.
NOTA: Las llaves
{
y}
no son canónicas. Son un artefacto de algunos sistemas y usos.Fácil de modificar la expresión regular anterior para cumplir con los requisitos de la pregunta original.
SUGERENCIA: grupo / capturas de expresiones regulares
Para evitar la coincidencia de UUID NIL:
fuente
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
regex al rescate
o con paréntesis
fuente
/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
Si desea verificar o validar una versión específica de UUID, aquí están las expresiones regulares correspondientes.
El número de versión es el primer carácter del tercer grupo
[VERSION_NUMBER][0-9A-F]{3}
:UUID v1:
UUID v2:
UUID v3:
UUID v4:
UUID v5:
fuente
Si está utilizando Node.js para el desarrollo, se recomienda utilizar un paquete llamado Validator. Incluye todas las expresiones regulares requeridas para validar diferentes versiones de UUID, además de obtener varias otras funciones para la validación.
Aquí está el enlace npm: Validator
fuente
/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i
y / o/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
y / o/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
y / o/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
Además de la respuesta de Gambol que hará el trabajo en casi todos los casos , todas las respuestas dadas hasta ahora se perdieron y el formato agrupado (8-4-4-4-12) no es obligatorio para codificar GUID en el texto . Se usa con mucha frecuencia, pero obviamente también puede ser válida una cadena simple de 32 dígitos hexadecimales. [1] regex enh :
[1] La pregunta es sobre la verificación de la variable s, por lo que también debemos incluir la forma amigable para el usuario.
fuente
{?[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}}?
Todas las expresiones regulares específicas de tipo publicadas hasta ahora están fallando en el UUID nulo "tipo 0", definido en 4.1.7 del RFC como:
Para modificar la respuesta de Wolf:
O, para excluir correctamente un "tipo 0" sin todos los ceros, tenemos lo siguiente (gracias a Luke):
fuente
abcdef00-0000-0000-0000-000000000000
coincidiría con su expresión regular. Esta expresión regular coincidirá con UUID válidos, incluido el nulo:/^(?:[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
gracias a @usertatha con alguna modificación
fuente
Creo que la respuesta de Gambol es casi perfecta, pero malinterpreta el RFC 4122 § 4.1.1. Sección variante un poco.
Cubre los UUID de variante-1 (10xx = 8..b), pero no cubre las variantes de variante-0 (0xxx = 0..7) y variante-2 (110x = c..d) que están reservadas para compatibilidad con versiones anteriores, entonces son UUID técnicamente válidos. La variante 4 (111x = e..f) está reservada para uso futuro, por lo que no son válidas actualmente.
Además, el tipo 0 no es válido, ese "dígito" solo puede ser 0 si es un UUID NIL (como se menciona en la respuesta de Evan ).
Así que creo que la expresión regular más precisa que cumple con la especificación RFC 4122 actual es (incluidos los guiones):
fuente
Use el método .match () para verificar si String es UUID.
fuente
Una versión ligeramente modificada de las respuestas anteriores escrita de una manera más concisa. Esto validará cualquier GUID con guiones (sin embargo, se modifica fácilmente para que los guiones sean opcionales). Esto también admitirá caracteres en mayúsculas y minúsculas, lo que se ha convertido en la convención independientemente de la especificación:
La clave aquí es la parte que se repite a continuación.
Que simplemente repite los 4 patrones de char 3 veces
fuente
A-f
debería serA-F
así:/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
Una buena manera de hacerlo en Node es usar el
ajv
paquete ( https://github.com/epoberezkin/ajv ).fuente
Creo que una mejor manera es usar el método estático fromString para evitar esas expresiones regulares.
Por otra parte
lanza java.lang.IllegalArgumentException: cadena de UUID no válida: x
fuente