424 Stimmen

Wie prüfe ich eine gültige UUID/GUID?

Wie kann man prüfen, ob eine Variable einen gültigen UUID/GUID-Bezeichner enthält?

Ich bin derzeit nur an der Validierung der Typen 1 und 4 interessiert, aber das sollte keine Einschränkung für Ihre Antworten sein.

597voto

Gambol Punkte 5484

Derzeit sind UUIDs wie in RFC4122 spezifiziert. Ein oft vernachlässigter Grenzfall ist die NIL-UUID, die ici . Die folgende Regex berücksichtigt dies und liefert eine Übereinstimmung für eine NIL UUID. Siehe unten für eine UUID, die nur Nicht-NIL UUIDs akzeptiert. Diese beiden Lösungen gelten für die Versionen 1 bis 5 (siehe das erste Zeichen des dritten Blocks).

Um eine UUID zu validieren, muss daher...

/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i

...stellt sicher, dass Sie eine kanonisch formatierte UUID mit den Versionen 1 bis 5 und der entsprechenden Variante gemäß RFC4122 haben.

HINWEIS: Hosenträger { y } sind nicht kanonisch. Sie sind ein Artefakt einiger Systeme und Verwendungen.

Die obige Regex kann leicht geändert werden, um die Anforderungen der ursprünglichen Frage zu erfüllen.

TIPP: regex gruppieren/erfassen

Um einen Abgleich mit NIL UUID zu vermeiden:

/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i

99voto

Ivan Gabriele Punkte 5377

Wenn Sie eine bestimmte UUID-Version prüfen oder validieren möchten, finden Sie hier die entsprechenden Regexe.

Beachten Sie, dass der einzige Unterschied ist die Versionsnummer die in 4.1.3. Version Kapitel von UUID 4122 RFC .

Die Versionsnummer ist das erste Zeichen der dritten Gruppe: [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

81voto

ryanb Punkte 914

Regex zur Rettung

/^[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');

oder mit Klammern

/^\{?[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}\}?$/

59voto

Neeraj Sharma Punkte 1007

Wenn Sie Node.js für die Entwicklung verwenden, ist es empfehlenswert, ein Paket namens Validator zu verwenden. Es enthält alle Regexe, die für die Validierung verschiedener Versionen von UUIDs erforderlich sind, sowie verschiedene andere Funktionen für die Validierung.

Hier ist der npm-Link: Prüfer

var a = 'd3aa88e2-c754-41e0-8ba6-4198a34aa0a2'
v.isUUID(a)
true
v.isUUID('abc')
false
v.isNull(a)
false

59voto

configbug Punkte 538

Wenn Sie das uuid-Paket verwenden, bietet dieses Paket eine boolesche Validierungsfunktion, die Ihnen sagt, ob eine uuid gültig ist oder nicht.

Beispiel:

import { validate as isValidUUID } from 'uuid';

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X