2016-12-31 11 views
2

我想爲php的uniqid準備簡單的正則表達式。我查了uniqid手冊尋找用作返回值的字符集。但文檔只提到:什麼字符集是由php的uniqid組成的?

@return字符串的唯一標識符,作爲一個字符串。

而且

有了一個空的前綴,返回的字符串將是13個字符長。如果more_entropy爲true,則爲23個字符。

我想知道什麼字符,我可以期待在返回值。它是一個十六進制字符串?如何確定?哪裏可以找到關於uniqid功能的更多信息?

回答

1

該文檔沒有指定字符串內容;只有它的長度。一般來說,你不應該依賴它。如果您打印一對分隔符之間的值,如引號,你可以在正則表達式中使用它們:爲你制定一個特定的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); 
} 

它給你兩種可能的輸出格式:

  1. uniqid() - 13個字符,hexadecimal number
  2. uniqid('', true) - 14 - 23個字符,hexadecimal number with floating number suffix computed elsewhere

如果使用其他分隔符不是字母數字字符和點,你可以使用這些簡單的正則表達式的一個搶無論是在兩種格式的值:

  1. [0-9a-f]+
  2. [.0-9a-f]+

如果您需要任何PHP版本的100%格式保證,您可以根據sprintf編寫自己的功能。

我承認,uniqid不太可能會發生顯着變化;我希望創建其他擴展來提供不同的格式。 Another comment in uniqid documentation顯示了符合RFC 4211的UUID實現。還有一個討論on stackoverflow about it

相關問題