如何确定字符串是否是有效的 v4 UUID?

新手上路,请多包涵

我正在根据客户端浏览器生成的 UUID 制作验证器,我用它来识别用户发送的某种类型的数据;并想验证客户端发送的 UUID 实际上是有效的 版本 4 UUID

我找到了这个 PHP preg_match UUID v4 ,它很接近但不完全是我想要的。我想知道是否存在类似于 is_empty()strtodate() 如果字符串无效发送 FALSE 的东西。

我可以基于正则表达式来做,但我想要更原生的东西来测试它。

有任何想法吗?

原文由 Rafael 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

Version 4 UUIDs have the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx where x is any hexadecimal digit and y is one of 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');

原文由 Ωmega 发布,翻译遵循 CC BY-SA 3.0 许可协议

所有现有的答案都使用正则表达式。如果您使用的是 Python ,则可能需要考虑 try/except 以防您不想使用正则表达式:( 比上面的答案短一点)。

我们的验证器将是:

 import uuid

def is_valid_uuid(val):
    try:
        uuid.UUID(str(val))
        return True
    except ValueError:
        return False

 >>> 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
>>> is_valid_uuid("{20f5484b-88ae-49b0-8af0-3a389b4917dd}")
True
>>> is_valid_uuid("20f5484b88ae49b08af03a389b4917dd")
True

原文由 slajma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题