357 votes

Comment tester un UUID/GUID valide ?

Comment vérifier si une variable contient un identifiant UUID/GUID valide ?

Je ne suis actuellement intéressé que par la validation des types 1 et 4, mais ce n'est pas une limite pour votre réponse.

0 votes

Au format chaîne, pas hex, pas bin, ou je ne sais pas ce que vous demandez

0 votes

^(\{){0,1}[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}(\}){0,1}$

0 votes

Si vous ne parvenez pas à exclure les variables contenant une chaîne de 32 chiffres hexadécimaux consécutifs (sans regroupement), consultez le site suivant ma réponse

15voto

Wolf Points 1039

A côté de La réponse de Gambol qui feront l'affaire dans presque tous les cas toutes les réponses données jusqu'à présent ont omis que la mise en forme groupée (8-4-4-4-4-12) n'est pas obligatoire pour encoder les GUIDs dans le texte . Il est très souvent utilisé, mais il est évident qu'une simple chaîne de 32 chiffres hexadécimaux peut également être valide. [1] regex améliorer :

/^[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 question porte sur vérifier ing variable nous devons donc inclure la forme non conviviale également.

10voto

Evan Edwards Points 101

Toutes les regex spécifiques à un type postées jusqu'à présent échouent sur l'UUID Nil de "type 0", défini dans la section 4.1.7 de la RFC comme suit :

L'UUID nul est une forme spéciale d'UUID dont les 128 bits sont mis à zéro : 00000000-0000-0000-0000-000000000000

Pour modifier la réponse 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

Ou, pour exclure correctement un "type 0" sans tous les zéros, nous avons ce qui suit (merci à 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

10voto

configbug Points 239

Si vous utilisez le paquet uuid, ce paquet apporte une fonction de validation booléenne où il vous dit si un uuid est valide ou non.

Exemple :

import { validate as isValidUUID } from 'uuid';

if (!isValidUUID(tx.originId)) {
  return Promise.reject('Invalid OriginID');
}

4voto

B. Zoli Points 31

Je pense La réponse de Gambol est presque parfaite, mais elle interprète mal la fonction RFC 4122 § 4.1.1. Section variante un peu.

Il couvre les UUIDs de la Variante-1 (10xx = 8..b), mais ne couvre pas les variantes de la Variante-0 (0xxx = 0..7) et de la Variante-2 (110x = c..d) qui sont réservées pour la compatibilité ascendante, donc ce sont des UUIDs techniquement valides. La variante-4 (111x = e..f) est en effet réservée pour une utilisation future, elle n'est donc pas valide actuellement.

De même, le type 0 n'est pas valide, ce "chiffre" ne peut être 0 que si c'est un UUID NIL (comme mentionné dans Réponse d'Evan ).

Je pense donc que la regex la plus précise et conforme à la spécification actuelle de la RFC 4122 est (y compris les traits d'union) :

/^([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[0-9a-d][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i
                            ^                ^^^^^^
                    (0 type is not valid)  (only e..f variant digit is invalid currently)

3voto

James Morrison Points 220

Une version légèrement modifiée des réponses ci-dessus, rédigée de manière plus concise. Cela validera tout GUID avec des traits d'union (mais facilement modifiable pour rendre les traits d'union facultatifs). Elle prendra également en charge les caractères majuscules et minuscules, ce qui est devenu la convention indépendamment de la spécification :

/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i

La clé ici est la partie répétitive ci-dessous

(([0-9a-fA-F]{4}\-){3})

qui répète simplement les 4 motifs de la carte 3 fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X