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.
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.
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.
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
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)
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 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.
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
0 votes
Ça pourrait être utile : npmjs.com/package/uuid-validate