Intereting Posts
Обработка сложных предложений WHERE с помощью PHP Query Builder Переменные сеанса PHP не сохраняются с помощью ajax Проблема с кодировкой php: file_get_contents Почему бы не хранить PHP SESSION на томе NFS? Doctrine 2.5 Неожиданное поведение выборки ассоциации Сохранение данных на стороне сервера по всему массиву клиентов Множественная настройка базы данных нескольких арендаторов Outlook API OAuth2 автономный доступ / постоянный доступ с использованием php Как получить данные массива $ _FILES, как и после отправки формы в следующем сценарии? Некоторые проблемы с Sphinx и PHP Как я могу создать функцию динамически? Получить значение всего столбца из одной таблицы и получить значение другого столбца из второй таблицы Как загладить первую букву первого слова в предложении? Как отобразить сообщение после загрузки файла? конвертировать url в ссылки из строки, за исключением случаев, когда они находятся в атрибуте тега html

Как определить, является ли строка допустимым UUID v4?

Я делаю валидатор на основе UUID, созданного браузером клиента, я использую его для идентификации данных определенного типа, которые отправляет пользователь; и хотел бы подтвердить, что UUID который его отправляет клиенту, фактически является допустимым UUID версии 4 .

Я нашел этот PHP preg_match UUID v4 , он близок, но не совсем то, что я ищу. Я хочу знать, существует ли что-то похожее на is_empty() или strtodate() Если строка недействительна, отправляет FALSE .

я мог бы сделать, основываясь на регулярном выражении, но мне хотелось бы, чтобы что-то более родное, чтобы проверить его.

Есть идеи?

Версии 4 UUID имеют форму xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx где x – любая шестнадцатеричная цифра, а y – одна из 8 , 9 , A или B

 ^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$ 

Чтобы разрешить строчные буквы, используйте модификатор i

 $UUIDv4 = '/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i'; preg_match($UUIDv4, $value) or die('Not valid UUID'); , $UUIDv4 = '/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i'; preg_match($UUIDv4, $value) or die('Not valid UUID'); 

Я нашел этот вопрос, пока искал ответ на Python. Чтобы помочь людям в той же ситуации, я добавил решение Python .

Вы можете использовать модуль uuid :

 #!/usr/bin/env python from uuid import UUID def is_valid_uuid(uuid_to_test, version=4): """ Check if uuid_to_test is a valid UUID. Parameters ---------- uuid_to_test : str version : {1, 2, 3, 4} Returns ------- `True` if uuid_to_test is a valid UUID, otherwise `False`. Examples -------- >>> is_valid_uuid('c9bf9e57-1685-4c89-bafb-ff5af830be8a') True >>> is_valid_uuid('c9bf9e58') False """ try: uuid_obj = UUID(uuid_to_test, version=version) except: return False return str(uuid_obj) == uuid_to_test if __name__ == '__main__': import doctest doctest.testmod() 
 import re UUID_PATTERN = re.compile(r'^[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}$', re.IGNORECASE) uuid = '20f5484b-88ae-49b0-8af0-3a389b4917dd' if UUID_PATTERN.match(uuid): return True else: return False 

Если вам нужна только безопасность (например, если вам нужно распечатать его в javascript-коде, и вы хотите избежать XSS), это не имеет особого значения положение тире, так что это просто:

  /^[a-z0-9\-]{36}$/i 

https://regex101.com/r/MDqB2Z/1