regex PHP验证有效的UUID

dly7yett  于 2022-12-05  发布在  PHP
关注(0)|答案(3)|浏览(246)

我在another answer中找到了以下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是否有办法验证传递的数字是否与正确的格式匹配等等?
任何帮助都是非常感谢的。

pengsaosao

pengsaosao1#

根据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
eoigrqb6

eoigrqb62#

我使用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;
}

你可以看到完整的要点here

qnakjoqk

qnakjoqk3#

您应该使用regex。为此,您可以使用以下快速regex:

/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i

它忽略了字符的情况下,和工作相同的一些正则表达式,其中更长。
您可以找到完整的解释here
要使用它,您可以执行以下操作:

if(is_string($uuid) && preg_match('/^[a-f\d]{8}(-[a-f\d]{4}){4}[a-f\d]{8}$/i', $uuid)) {
   // your code here
}

相关问题