javascript - validate - ¿Cómo probar un UUID/GUID válido?
validator javascript (7)
Actualmente, los UUID son como se especifica en RFC4122.
Por lo tanto, para validar un UUID ...
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
... garantiza que tiene un UUID formateado canónicamente que es la versión 1 a 5 y es la variante adecuada 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 regex
¿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 su respuesta no tiene límite.
Además de la respuesta de Gambol que hará el trabajo en casi todos los casos , todas las respuestas dadas hasta ahora no detectaron que el formato agrupado (8-4-4-4-12) no es obligatorio para codificar los GUID en el texto . Se usa con mucha frecuencia, pero obviamente también una cadena simple de 32 dígitos hexadecimales puede ser válida. [1] regex enh :
/^[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$/i
[1] La pregunta es sobre la verificación de las variables , por lo que también deberíamos incluir la forma no amigable para el usuario.
- ¿Por qué hay guiones en un GUID de .NET? - Desbordamiento de pila más respuesta aceptada
- Pruebe y valide un GUID (guid.us)
- Método Guid.ToString (cadena) (MSDN)
El pequeño método para verificar si String es UUID.
public boolean isUUID(String s){
return s.matches("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$");
}
Si desea verificar o validar una versión de UUID específica, aquí están las expresiones regulares correspondientes.
Tenga en cuenta que la única diferencia es el número de versión , que se explica en
4.1.3. Version
Capítulo de4.1.3. Version
de UUID 4122 RFC .
El número de versión es el primer personaje del tercer grupo: [VERSION_NUMBER][0-9A-F]{3}
:
UUID v1:
/^[0-9A-F]{8}-[0-9A-F]{4}-[1][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
UUID v2:
/^[0-9A-F]{8}-[0-9A-F]{4}-[2][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
UUID v3:
/^[0-9A-F]{8}-[0-9A-F]{4}-[3][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
UUID v4:
/^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
UUID v5:
/^[0-9A-F]{8}-[0-9A-F]{4}-[5][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
Si está utilizando Node.js para el desarrollo, se recomienda utilizar un paquete llamado Validator. Incluye todas las expresiones regulares necesarias para validar diferentes versiones de UUID además de otras funciones para la validación.
Aquí está el enlace npm: Validator
var a = ''d3aa88e2-c754-41e0-8ba6-4198a34aa0a2''
v.isUUID(a)
true
v.isUUID(''abc'')
false
v.isNull(a)
false
Todas las expresiones regulares específicas de tipo publicadas hasta ahora fallan en el UUID nulo "tipo 0", definido en 4.1.7 de la RFC como:
El UUID nulo es una forma especial de UUID que se especifica para tener todos los 128 bits configurados en cero:
00000000-0000-0000-0000-000000000000
Para modificar la respuesta de Wolf:
/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-5][0-9a-f]{3}-?[089ab][0-9a-f]{3}-?[0-9a-f]{12}$/i
O bien, para excluir correctamente un "tipo 0" sin todos los ceros, tenemos lo siguiente (gracias a Luke):
/^(?:[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
regex al rescate
/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(''01234567-9ABC-DEF0-1234-56789ABCDEF0'');
o con paréntesis
/^/{?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/}?$/