使用连字符格式化32个字符的字符串,使其成为UUID


Format 32-character string with hyphens to become UUID

我从外部源接收到一个UUID值,但该字符串不包含任何连字符。

有效的UUID应采用以下格式:

abcdef01-2345-6789-abcd-ef0123456789

如何转换:

$UUID = '42f704ab4ae141c78c185558f9447748';

收件人:

$UUID = '42f704ab-4ae1-41c7-8c18-5558f9447748';
<?php 
//$UUID = 42f704ab-4ae1-41c7-8c18-5558f944774
$UUID = "42f704ab4ae141c78c185558f9447748";

$UUID = substr($UUID, 0, 8) . '-' . substr($UUID, 8, 4) . '-' . substr($UUID, 12, 4) . '-' . substr($UUID, 16, 4)  . '-' . substr($UUID, 20);
echo $UUID;

这里有另一种方法:

$input = "42f704ab4ae141c78c185558f9447748";
$uuid = preg_replace("/('w{8})('w{4})('w{4})('w{4})('w{12})/i", "$1-$2-$3-$4-$5", $input);
echo $uuid;

类似于将数字字符串格式化为连字符电话号码的答案,您可以合理地使用preg_replace()sscanf()与连接功能的组合。

代码:(演示)(或无字符类)

$UUID = "f9e113324bd449809b98b0925eac3141";
echo preg_replace('/(?:^['da-f]{4})?['da-f]{4}'K/', '-', $UUID, 4);
echo "'n---'n";
vprintf('%s-%s-%s-%s-%s', sscanf($UUID, '%8s%4s%4s%4s%12s'));
echo "'n---'n";
echo implode('-', sscanf($UUID, '%8s%4s%4s%4s%12s'));

输出:

f9e11332-4bd4-4980-9b98-b0925eac3141
---
f9e11332-4bd4-4980-9b98-b0925eac3141
---
f9e11332-4bd4-4980-9b98-b0925eac3141