Wie überprüfe ich, ob die Variable eine gültige UUID / GUID-Kennung enthält?
Ich bin derzeit nur daran interessiert, die Typen 1 und 4 zu validieren, aber es sollte keine Einschränkung Ihrer Antworten sein.
javascript
regex
validation
uuid
guid
Marek Sebera
quelle
quelle
Antworten:
Derzeit entsprechen die UUIDs den Angaben in RFC4122. Ein oft vernachlässigter Rand Fall ist der NIL UUID, bemerkte hier . Der folgende reguläre Ausdruck berücksichtigt dies und gibt eine Übereinstimmung für eine NIL-UUID zurück. Unten finden Sie eine UUID, die nur Nicht-NIL-UUIDs akzeptiert. Beide Lösungen gelten für die Versionen 1 bis 5 (siehe das erste Zeichen des dritten Blocks).
Um eine UUID zu validieren ...
... stellt sicher, dass Sie eine kanonisch formatierte UUID haben, die Version 1 bis 5 ist und die entsprechende Variante gemäß RFC4122 ist.
HINWEIS: Klammern
{
und}
sind nicht kanonisch. Sie sind ein Artefakt einiger Systeme und Verwendungen.Es ist einfach, den obigen regulären Ausdruck zu ändern, um die Anforderungen der ursprünglichen Frage zu erfüllen.
TIPP: Regex-Gruppe / Captures
So vermeiden Sie eine Übereinstimmung mit der NIL-UUID:
quelle
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
Regex zur Rettung
oder mit Klammern
quelle
/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
Wenn Sie eine bestimmte UUID-Version überprüfen oder validieren möchten, finden Sie hier die entsprechenden regulären Ausdrücke.
Die Versionsnummer ist das erste Zeichen der dritten Gruppe
[VERSION_NUMBER][0-9A-F]{3}
::UUID v1:
UUID v2:
UUID v3:
UUID v4:
UUID v5:
quelle
Wenn Sie Node.js für die Entwicklung verwenden, wird empfohlen, ein Paket namens Validator zu verwenden. Es enthält alle regulären Ausdrücke, die zum Validieren verschiedener Versionen von UUIDs erforderlich sind, und Sie erhalten verschiedene andere Funktionen zur Validierung.
Hier ist der npm-Link: Validator
quelle
/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i
und / oder/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
und / oder/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
und / oder/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
Neben der Antwort von Gambol , die in fast allen Fällen die Aufgabe erfüllt , wurden alle bisher gegebenen Antworten übersehen, sodass die gruppierte Formatierung (8-4-4-4-12) nicht erforderlich ist, um GUIDs in Text zu codieren . Es wird extrem oft verwendet, aber natürlich kann auch eine einfache Kette mit 32 hexadezimalen Ziffern gültig sein. [1] Regex Enh :
[1] Die Frage ist , über Check ing Variable s, so dass wir die benutzerunfreundlich Form als auch enthalten sollen.
quelle
{?[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}}?
Alle bisher veröffentlichten typspezifischen regulären Ausdrücke schlagen in der Null-UUID "Typ 0" fehl, die in 4.1.7 des RFC wie folgt definiert ist:
So ändern Sie Wolfs Antwort:
Oder um einen "Typ 0" ohne alle Nullen richtig auszuschließen, haben wir Folgendes (danke an Luke):
quelle
abcdef00-0000-0000-0000-000000000000
Würde zu Ihrer Regex passen. Diese Regex entspricht gültigen UUIDs, einschließlich der Null:/^(?:[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
danke an @usertatha mit einigen modifikationen
quelle
Ich denke, Gambols Antwort ist fast perfekt, aber sie interpretiert den RFC 4122 § 4.1.1 falsch . Variantenabschnitt etwas.
Es deckt UUIDs der Variante 1 (10xx = 8..b) ab, jedoch nicht die Varianten der Varianten 0 (0xxx = 0..7) und 2 (110x = c..d), die der Abwärtskompatibilität vorbehalten sind. Sie sind also technisch gültige UUIDs. Variante-4 (111x = e..f) ist in der Tat für die zukünftige Verwendung reserviert, daher sind sie derzeit nicht gültig.
Außerdem ist der Typ 0 nicht gültig. Diese "Ziffer" darf nur 0 sein, wenn es sich um eine NIL-UUID handelt (wie in Evans Antwort erwähnt ).
Daher denke ich, dass der genaueste reguläre Ausdruck, der der aktuellen RFC 4122-Spezifikation entspricht, (einschließlich Bindestriche) lautet:
quelle
Verwenden Sie die Methode .match (), um zu überprüfen, ob String eine UUID ist.
quelle
Eine leicht modifizierte Version der obigen Antworten, die präziser geschrieben wurde. Dadurch wird jede GUID mit Bindestrichen überprüft (kann jedoch leicht geändert werden, um Bindestriche optional zu machen). Dies unterstützt auch Groß- und Kleinbuchstaben, die unabhängig von der Spezifikation zur Konvention geworden sind:
Der Schlüssel hier ist der sich wiederholende Teil unten
Was einfach die 4 Zeichenmuster 3 Mal wiederholt
quelle
A-f
sollteA-F
so sein:/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
Eine gute Möglichkeit, dies in Node zu tun, ist die Verwendung des
ajv
Pakets ( https://github.com/epoberezkin/ajv ).quelle
Ich denke, ein besserer Weg ist die Verwendung der statischen Methode von String, um diese regulären Ausdrücke zu vermeiden.
Andererseits
löst java.lang.IllegalArgumentException aus: Ungültige UUID-Zeichenfolge: x
quelle