如何测试有效的 UUID/GUID?

2022-08-29 23:39:03

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

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


答案 1

目前,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,该 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

答案 2

如果要检查或验证特定的 UUID 版本,下面是相应的正则表达式。

请注意,唯一的区别是版本号,这在 UUID 4122 RFC 的章节中进行了说明。4.1.3. Version

版本号是第三组的第一个字符:[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