如何测试有效的 UUID/GUID?

新手上路,请多包涵

如何检查变量是否包含有效的 UUID/GUID 标识符?

我目前只对验证类型 1 和 4 感兴趣,但这不应该成为您答案的限制。

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

阅读 1.9k
2 个回答

目前,UUID 在 RFC4122 中指定。一个经常被忽视的边缘情况是 NIL UUID,注意 这里。以下正则表达式考虑了这一点,并将返回 NIL UUID 的匹配项。有关仅接受非 NIL UUID 的 UUID,请参见下文。这两种解决方案都适用于版本 1 到 5(参见第三块的第一个字符)。

因此,要验证 UUID…

 /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i

…确保您有一个规范格式的 UUID,它是版本 1 到 5,并且是符合 RFC4122 的适当变体。

注意:大括号 {} 不是规范的。它们是某些系统和用法的产物。

轻松修改上述正则表达式以满足原始问题的要求。

提示:正则表达式组/捕获

为避免匹配 NIL UUID:

 /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i

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

如果你想检查或验证特定的 UUID 版本,这里是相应的正则表达式。

请注意, 唯一的区别是版本号,这在 4.1.3. Version UUID 4122 RFC 的章节中有解释。

版本号是第三组的第一个字符: [VERSION_NUMBER][0-9A-F]{3}

  • UUID v1:
   /^[0-9A-F]{8}-[0-9A-F]{4}-[1][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i

  • UUID v2:
   /^[0-9A-F]{8}-[0-9A-F]{4}-[2][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i

  • UUID v3:
   /^[0-9A-F]{8}-[0-9A-F]{4}-[3][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i

  • UUID v4:
   /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i

  • UUID v5:
   /^[0-9A-F]{8}-[0-9A-F]{4}-[5][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i

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

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