我想爲php的uniqid
準備簡單的正則表達式。我查了uniqid手冊尋找用作返回值的字符集。但文檔只提到:什麼字符集是由php的uniqid組成的?
@return字符串的唯一標識符,作爲一個字符串。
而且
有了一個空的前綴,返回的字符串將是13個字符長。如果more_entropy爲true,則爲23個字符。
我想知道什麼字符,我可以期待在返回值。它是一個十六進制字符串?如何確定?哪裏可以找到關於uniqid功能的更多信息?
我想爲php的uniqid
準備簡單的正則表達式。我查了uniqid手冊尋找用作返回值的字符集。但文檔只提到:什麼字符集是由php的uniqid組成的?
@return字符串的唯一標識符,作爲一個字符串。
而且
有了一個空的前綴,返回的字符串將是13個字符長。如果more_entropy爲true,則爲23個字符。
我想知道什麼字符,我可以期待在返回值。它是一個十六進制字符串?如何確定?哪裏可以找到關於uniqid功能的更多信息?
該文檔沒有指定字符串內容;只有它的長度。一般來說,你不應該依賴它。如果您打印一對分隔符之間的值,如引號,你可以在正則表達式中使用它們:爲你制定一個特定的PHP版本
"([^"]+)" ($1 contains the value)
只要,你可以檢查其執行和承擔,它不會改變。如果你升級,你應該檢查,如果假設仍然有效。
A comment in uniqid
documentation描述,它本質上是一個十六進制數與可選的數字後綴:
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個字符,hexadecimal numberuniqid('', true)
- 14 - 23個字符,hexadecimal number with floating number suffix computed elsewhere如果使用其他分隔符不是字母數字字符和點,你可以使用這些簡單的正則表達式的一個搶無論是在兩種格式的值:
[0-9a-f]+
[.0-9a-f]+
如果您需要任何PHP版本的100%格式保證,您可以根據sprintf
編寫自己的功能。
我承認,uniqid
不太可能會發生顯着變化;我希望創建其他擴展來提供不同的格式。 Another comment in uniqid
documentation顯示了符合RFC 4211的UUID實現。還有一個討論on stackoverflow about it。
我發現這對PHP的網站:http://www.php.net/manual/en/function.uniqid.php#95001
如果這是可信的,則13個字符的版本是完全十六進制。 然而,23字符的版本有:
如果您需要完全肯定,你可以自己驗證:http://sandbox.onlinephpfunctions.com/code/c04c7854b764faee2548180eddb8c23288dcb5f7