Я хотел бы подготовить простое регулярное выражение для PHP uniqid
, Я проверил uniqid вручную ищет набор символов, используемых в качестве возвращаемого значения. Но в документации только упоминается, что:
@ возврат строки уникальный идентификатор, как строка.
А также
С пустым префиксом возвращаемая строка будет иметь длину 13 символов. Если more_entropy имеет значение true, это будет 23 символа.
Я хотел бы знать, каких символов можно ожидать в возвращаемом значении. Это шестнадцатеричная строка? Как узнать наверняка? Где найти что-то еще о функции uniqid?
В документации не указывается содержимое строки; только его длина. Как правило, вы не должны зависеть от этого. Если вы печатаете значение между парой разделителей, например кавычками, вы можете использовать их в регулярном выражении:
"([^"]+)" ($1 contains the value)
Пока вы разрабатываете для конкретной версии PHP, вы можете проверить ее реализацию и предположить, что она не меняется. Если вы обновляете, вы должны проверить, если предположение остается в силе.
Комментарий в uniqid
документация описывает, что это по сути шестнадцатеричное число с необязательным числовым суффиксом:
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]+
Если вам нужна 100% гарантия формата для любой версии PHP, вы можете написать свою собственную функцию на основе sprintf
.
Я признаю, что маловероятно, что uniqid
значительно изменится; Я ожидал бы создание других расширений, чтобы обеспечить другие форматы. Еще один комментарий в uniqid
документация показывает реализацию UUID в соответствии с RFC 4211. Была также дискуссия на stackoverflow об этом.
Я нашел это на сайте php: http://www.php.net/manual/en/function.uniqid.php#95001
Если верить этому, то версия из 13 символов полностью шестнадцатеричная.
Однако версия из 23 символов имеет:
Если вам нужно быть полностью уверенным, вы можете убедиться в этом сами: http://sandbox.onlinephpfunctions.com/code/c04c7854b764faee2548180eddb8c23288dcb5f7