Как проверить, содержит ли переменная действительный идентификатор UUID / GUID?
В настоящее время меня интересует только проверка типов 1 и 4, но это не должно быть ограничением ваших ответов.
javascript
regex
validation
uuid
guid
Марек Себера
источник
источник
Ответы:
В настоящее время UUID соответствуют указанным в RFC4122. Часто забытый крайний случай - NIL UUID, отмеченный здесь . Следующее регулярное выражение учитывает это и возвращает совпадение для NIL UUID. См. Ниже UUID, который принимает только не-NIL UUID. Оба эти решения предназначены для версий с 1 по 5 (см. Первый символ третьего блока).
Поэтому, чтобы проверить UUID ...
... гарантирует, что у вас есть канонически отформатированный UUID версии 1-5 и соответствующий вариант согласно RFC4122.
ПРИМЕЧАНИЕ: брекеты
{
и}
не являются каноническими. Они являются артефактом некоторых систем и обычаев.Легко изменить приведенное выше регулярное выражение, чтобы удовлетворить требования исходного вопроса.
СОВЕТ: регулярное выражение группы / захватывает
Чтобы избежать совпадения NIL UUID:
источник
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
регулярное выражение на помощь
или с кронштейнами
источник
/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
Если вы хотите проверить или проверить конкретную версию UUID, вот соответствующие регулярные выражения.
Номер версии является первым символом третьей группы
[VERSION_NUMBER][0-9A-F]{3}
:UUID v1:
UUID v2:
UUID v3:
UUID v4:
UUID v5:
источник
Если вы используете Node.js для разработки, рекомендуется использовать пакет под названием Validator. Он включает в себя все регулярные выражения, необходимые для проверки различных версий UUID, плюс вы получаете различные другие функции для проверки.
Вот ссылка npm: Validator
источник
/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i
и / или/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
и / или/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
и / или/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
Кроме ответа Гамбола, который будет выполнять работу почти во всех случаях , все ответы, представленные до сих пор, пропустили, что групповое форматирование (8-4-4-4-12) не является обязательным для кодирования GUID в тексте . Он используется очень часто, но, очевидно, допустима также простая цепочка из 32 шестнадцатеричных цифр. [1] регулярное выражение ENH :
[1] Речь идет о регистрации ING переменной s, поэтому мы должны включить пользователь недружественной формы , а также.
источник
{?[0-9a-f]{8}-?[0-9a-f]{4}-?[1-5][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}}?
Все приведенные к настоящему времени типовые регулярные выражения не работают с нулевым UUID типа 0, определенным в 4.1.7 RFC:
Чтобы изменить ответ Вольфа:
Или, чтобы правильно исключить «тип 0» без всех нулей, у нас есть следующее (спасибо Люку):
источник
abcdef00-0000-0000-0000-000000000000
будет соответствовать вашему регулярному выражению. Это регулярное выражение будет соответствовать действительным UUID, включая ноль:/^(?:[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
благодаря @usertatha с некоторыми изменениями
источник
Я думаю, что ответ Гамбола почти идеален, но он неверно истолковывает RFC 4122 § 4.1.1. Вариант раздела немного.
Он охватывает варианты UUID варианта 1 (10xx = 8..b), но не охватывает варианты варианта 0 (0xxx = 0,7) и варианта 2 (110x = c..d), которые зарезервированы для обратной совместимости, поэтому они являются технически действительными UUID. Вариант-4 (111x = e..f) действительно зарезервирован для будущего использования, поэтому в настоящее время он недействителен.
Кроме того, тип 0 недопустим, эта цифра может быть только 0, если это NIL UUID (как упомянуто в ответе Эвана ).
Поэтому я думаю, что наиболее точное регулярное выражение, соответствующее текущей спецификации RFC 4122, (включая дефисы):
источник
Используйте метод .match (), чтобы проверить, является ли String UUID.
источник
Слегка измененная версия приведенных выше ответов написана более лаконично. Это проверит любой GUID с дефисами (однако его легко изменить, чтобы сделать дефис необязательным). Это также будет поддерживать символы верхнего и нижнего регистра, которые стали соглашением независимо от спецификации:
Ключ здесь - повторяющаяся часть ниже
Который просто повторяет 4 паттерна 3 символа
источник
A-f
должно бытьA-F
так:/^([0-9a-fA-F]{8})-(([0-9a-fA-F]{4}\-){3})([0-9a-fA-F]{12})$/i
Хороший способ сделать это в Node - использовать
ajv
пакет ( https://github.com/epoberezkin/ajv ).источник
Я думаю, что лучше использовать статический метод fromString, чтобы избежать этих регулярных выражений.
С другой стороны
throws java.lang.IllegalArgumentException: Неверная строка UUID: x
источник