文本检查

UUID 校验器

校验器接受标准十六进制 UUID,并报告版本半字节和变体。下面更严的正则还要求版本为 1–8,且变体属于 RFC。

校验 UUID

空行会跳过。最多 200 行。

粘贴一条或多条 UUID,查看文本、版本和变体。

结构正则只检查 8-4-4-4-12 这几组。带版本的正则还会检查版本半字节是 1–8,变体半字节是 8、9、a 或 b。v7 正则是同一想法,只是把版本固定为 7。

在标准字符串里,版本字符位于下标 14,也就是第三组的第一个字符。

结构正则

^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$

带版本的正则

^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$

UUID v7 正则

^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$

JavaScript

const UUID_VERSIONED = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;

function uuidVersion(value) {
  if (!UUID_VERSIONED.test(value)) return null;
  return Number.parseInt(value.charAt(14), 16);
}

Python

import re

UUID_VERSIONED = re.compile(
    r"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
)

def uuid_version(value: str) -> int | None:
    if UUID_VERSIONED.fullmatch(value) is None:
        return None
    return int(value[14], 16)

常见问题

这里怎样算有效?

校验器接受 32 位十六进制,可以带标准连字符,也可以不带。开头的 urn:uuid: 会被忽略。然后它显示版本半字节和变体位。

哪一条正则更严?

带版本的正则还要求版本是 1 到 8,并且变体半字节是 8、9、a 或 b。全零的 nil UUID 不符合这条更严的正则。

示例代码会调用库吗?

不会。JavaScript 和 Python 示例只测试这条带版本的正则,并读取版本字符。