Comment vérifier si la variable contient un identifiant UUID / GUID valide?
Je ne suis actuellement intéressé que par la validation des types 1 et 4, mais cela ne devrait pas limiter vos réponses.
javascript
regex
validation
uuid
guid
Marek Sebera
la source
la source
Réponses:
Actuellement, les UUID sont tels que spécifiés dans la RFC4122. Un cas de bord souvent négligé est le NIL UUID, noté ici . Le regex suivant en tient compte et renverra une correspondance pour un NU UUID. Voir ci-dessous pour un UUID qui accepte uniquement les UUID non NIL. Ces deux solutions concernent les versions 1 à 5 (voir le premier caractère du troisième bloc).
Par conséquent, pour valider un UUID ...
... garantit que vous disposez d'un UUID au format canonique qui est la version 1 à 5 et est la variante appropriée selon RFC4122.
REMARQUE: les accolades
{
et}
ne sont pas canoniques. Ils sont un artefact de certains systèmes et usages.Facile à modifier l'expression rationnelle ci-dessus pour répondre aux exigences de la question d'origine.
CONSEIL: groupe regex / captures
Pour éviter de faire correspondre NU UUID:
la source
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
regex à la rescousse
ou avec supports
la source
/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
Si vous souhaitez vérifier ou valider une version UUID spécifique, voici les expressions rationnelles correspondantes.
Le numéro de version est le premier caractère du troisième groupe
[VERSION_NUMBER][0-9A-F]{3}
::UUID v1:
UUID v2:
UUID v3:
UUID v4:
UUID v5:
la source
Si vous utilisez Node.js pour le développement, il est recommandé d'utiliser un package appelé Validator. Il comprend toutes les expressions rationnelles requises pour valider différentes versions d'UUID et vous obtenez diverses autres fonctions pour la validation.
Voici le lien npm: Validateur
la source
/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i
et / ou/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
et / ou/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
et / ou/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
À côté de la réponse de Gambol qui fera l'affaire dans presque tous les cas , toutes les réponses données jusqu'à présent ont manqué que le formatage groupé (8-4-4-4-12) n'est pas obligatoire pour coder les GUID en texte . Il est utilisé très souvent, mais évidemment, une chaîne simple de 32 chiffres hexadécimaux peut être valide. [1] regex enh :
[1] La question est de vérifier ing variables s, donc nous devrions inclure le formulaire peu convivial ainsi.
la source
{?[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}}?
Tous les regex spécifiques au type publiés jusqu'à présent échouent sur le "type 0" UIL Nil, défini dans 4.1.7 du RFC comme:
Pour modifier la réponse de Wolf:
Ou, pour exclure correctement un "type 0" sans tous les zéros, nous avons ce qui suit (grâce à Luke):
la source
abcdef00-0000-0000-0000-000000000000
correspondrait à votre expression régulière. Cette expression régulière correspondra aux UUID valides, y compris le zéro:/^(?:[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
merci à @usertatha avec quelques modifications
la source
Je pense que la réponse de Gambol est presque parfaite, mais elle interprète mal le RFC 4122 § 4.1.1. Section variante un peu.
Il couvre les UUID Variant-1 (10xx = 8..b), mais ne couvre pas les variantes Variant-0 (0xxx = 0..7) et Variant-2 (110x = c..d) qui sont réservées pour la compatibilité descendante, ce sont donc des UUID techniquement valides. La variante-4 (111x = e..f) est en effet réservée pour une utilisation future, elles ne sont donc pas valides actuellement.
De plus, le type 0 n'est pas valide, ce "chiffre" ne peut être égal à 0 que si c'est un NU UUID (comme mentionné dans la réponse d'Evan ).
Je pense donc que l'expression rationnelle la plus précise qui est conforme à la spécification RFC 4122 actuelle est (y compris les tirets):
la source
Utilisez la méthode .match () pour vérifier si String est UUID.
la source
Une version légèrement modifiée des réponses ci-dessus rédigées de manière plus concise. Cela validera tout GUID avec des tirets (cependant facilement modifié pour rendre les tirets facultatifs). Cela prendra également en charge les majuscules et les minuscules, ce qui est devenu la convention quelle que soit la spécification:
La clé ici est la partie répétitive ci-dessous
Qui répète simplement les 4 motifs de caractère 3 fois
la source
A-f
devrait êtreA-F
comme ça:/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
Une bonne façon de le faire dans Node est d'utiliser le
ajv
package ( https://github.com/epoberezkin/ajv ).la source
Je pense qu'une meilleure façon est d'utiliser la méthode statique fromString pour éviter ces expressions régulières.
D'autre part
lève java.lang.IllegalArgumentException: chaîne UUID non valide: x
la source