PHP 验证有效的 UUID



我在另一个答案中找到了以下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是否有办法验证传递的数字与正确的格式匹配或其他东西?

任何帮助将不胜感激。

根据维基百科,UUID v4的格式是:

版本 4 UUID 的形式为 xxxx-xx-4xxx-yxxx-xxx 其中 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

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

您可以在此处查看完整的要点。

你应该使用正则表达式。为此,您可以使用此快速正则表达式:

/^[a-fd]{8}(-[a-fd]{4}){4}[a-fd]{8}$/i

它忽略了字符的情况,并且与一些更长的正则表达式的工作方式相同。

您可以在此处找到完整的解释。

要使用它,您可以执行以下操作:

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

我正在使用这个函数。我从评论的链接中找到了来自 github 的正则表达式。它似乎也比许多其他人更快。

/**
 * @link https://gist.github.com/Joel-James/3a6201861f12a7acf4f2?permalink_comment_id=3030120#gistcomment-3030120
 */
public static function isValidUUID(string $uuid): bool
{
    return preg_match('/^[a-fd]{8}(-[a-fd]{4}){4}[a-fd]{8}$/i', $uuid) !== 1 ? false : true;
}

相关内容

  • 没有找到相关文章

最新更新