我正在根据客户端浏览器生成的UUID制作验证器,我用它来识别用户发送的某种类型的数据; 并且想要验证该UUID客户端发送它实际上是有效的版本4 UUID.
我发现这个PHP preg_match UUID v4,它很接近,但不完全是我正在寻找的.我想知道是否存在类似于is_empty()或strtodate()如果字符串无效的地方发送FALSE.
我可以根据正则表达式做,但我想要更原生的东西来测试它.
有任何想法吗?
Ωme*_*ega 86
版本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}$
Run Code Online (Sandbox Code Playgroud)
要允许使用小写字母,请使用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');
Run Code Online (Sandbox Code Playgroud)
Mar*_*oma 36
我在寻找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 ValueError:
return False
return str(uuid_obj) == uuid_to_test
if __name__ == '__main__':
import doctest
doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现有的所有答案都使用正则表达式。如果您使用的是Python,则不妨try/except使用regex :(
比上面的答案短一点)。
我们的验证器将是:
import uuid
def is_valid_uuid(val):
try:
uuid.UUID(str(val))
return True
except ValueError:
return False
Run Code Online (Sandbox Code Playgroud)
>>> is_valid_uuid(1)
False
>>> is_valid_uuid("123-UUID-wannabe")
False
>>> is_valid_uuid({"A":"b"})
False
>>> is_valid_uuid([1, 2, 3])
False
>>> is_valid_uuid(uuid.uuid4())
True
>>> is_valid_uuid(str(uuid.uuid4()))
True
>>> is_valid_uuid(uuid.uuid4().hex)
True
>>> is_valid_uuid(uuid.uuid3(uuid.NAMESPACE_DNS, 'example.net'))
True
>>> is_valid_uuid(uuid.uuid5(uuid.NAMESPACE_DNS, 'example.net'))
True
Run Code Online (Sandbox Code Playgroud)