php';它是由什么组成的?

php';它是由什么组成的?,php,uniqueidentifier,Php,Uniqueidentifier,我想为php的uniqid准备简单的正则表达式。我检查了手册,寻找用作返回值的字符集。但文件只提到: @返回字符串作为字符串的唯一标识符 及 如果前缀为空,则返回的字符串长度为13个字符。如果更多的熵是真的,它将是23个字符 我想知道返回值中可以包含哪些字符。是十六进制字符串吗?如何确定?在哪里可以找到有关uniqid函数的更多信息?我在php网站上找到了以下内容: 如果这是可信的,那么13个字符的版本完全是十六进制的。 但是,23个字符的版本有: 14个字符(十六进制) 然后是一个点 然后再

我想为php的
uniqid
准备简单的正则表达式。我检查了手册,寻找用作返回值的字符集。但文件只提到:

@返回字符串作为字符串的唯一标识符

如果前缀为空,则返回的字符串长度为13个字符。如果更多的熵是真的,它将是23个字符


我想知道返回值中可以包含哪些字符。是十六进制字符串吗?如何确定?在哪里可以找到有关uniqid函数的更多信息?

我在php网站上找到了以下内容:

如果这是可信的,那么13个字符的版本完全是十六进制的。 但是,23个字符的版本有:

  • 14个字符(十六进制)
  • 然后是一个点
  • 然后再加上8个字符(十进制)

如果需要完全确定,您可以自己验证:

文档没有指定字符串内容;只有它的长度。一般来说,你不应该依赖它。如果在一对分隔符(如引号)之间打印值,则可以在正则表达式中使用它们:

"([^"]+)"    ($1 contains the value)
只要为特定的PHP版本开发,就可以检查它的实现并假设它不会改变。如果升级,则应检查假设是否仍然有效

说明它本质上是一个十六进制数,带有可选的数字后缀:

if (more_entropy) {
    uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg() * 10);
} else {
    uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec);
}
这为您提供了两种可能的输出格式:

  • uniqid()
    -13个字符
  • uniqid(“”,true)
    -14-23个字符,
  • 如果使用字母数字字符和点以外的其他分隔符,则可以使用以下简单正则表达式之一获取以下两种格式的值:

  • [0-9a-f]+
  • [.0-9a-f]+
  • 如果您需要对任何PHP版本提供100%的格式保证,您可以基于此编写自己的函数

    我承认,
    uniqid
    不太可能发生重大变化;我希望创建其他扩展来提供不同的格式。显示了符合RFC 4211的UUID实现。还进行了讨论