7

我在另一个答案中找到了以下 Javascript 函数:

function createUUID() {
    var s = [];
    var hexDigits = "0123456789abcdef";

    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }

    s[14] = "4";
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
    s[8] = s[13] = s[18] = s[23] = "-";

    var uuid = s.join("");
    return uuid;
}

这会在 javascript 中创建一个 RFC 有效的 UUID/GUID。我想知道的是,一旦字符串到达​​ PHP 端,是否有办法验证它。我找到了一个正则表达式,它可能会大致验证该格式的所有内容为真:

/^[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}$/

但是只要你指定一个长度和格式相等的字符串,它就会通过验证。

有没有办法向 javascript 函数添加某种种子,然后在 PHP 中验证这一点,或者 PHP 是否有办法验证传递的数字是否与正确的格式匹配?

任何帮助是极大的赞赏。

4

2 回答 2

15

根据Wikipedia,UUID v4 的格式为:

第 4 版 UUID 的格式为 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,其中 x 是任何十六进制数字,y 是 8、9、A 或 B 之一。例如 f47ac10b-58cc-4372-a567-0e02b2c3d479

对应的正则表达式是:

/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
于 2012-10-09T21:28:22.853 回答
6

我使用regex验证和字符串验证来检查给定的字符串是否为有效的 UUID 格式。

if (!is_string($uuid) || (preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', $uuid) !== 1)) {
    return false;
}

你可以在这里看到完整的要点。

于 2015-12-28T09:01:53.603 回答