2016-12-31 4 views
2

Я хотел бы подготовить простое регулярное выражение для php's uniqid. Я проверил uniqid руководство для поиска набора символов, используемых в качестве возвращаемого значения. Но в документации упоминается только то, что:Какой набор символов содержит унифицированный php?

@return string уникальный идентификатор, как строка.

И

С пустым префиксом, то возвращаемая строка будет 13 символов. Если значение more_entropy истинно, это будет 23 символа.

Я хотел бы знать, какие символы можно ожидать в возвращаемом значении. Это шестнадцатеричная строка? Как точно знать? Где найти что-то еще о uniqid-функции?

ответ

1

В документации не указано содержание строки; только его длина. Как правило, вы не должны зависеть от этого. Если вы печатаете значение между двумя разделителями, как кавычки, вы можете использовать их в регулярном выражении:

"([^"]+)" ($1 contains the value) 

Пока вы разрабатываете для конкретной PHP версии, вы можете проверить его реализацию и предполагать, что он не меняется. Если вы обновляете, вы должны проверить, если предположение все еще действует.

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]+

Если вам нужна гарантия на 100% для любой версии PHP, вы можете написать свою собственную функцию на основе sprintf.

Я признаю, что маловероятно, что uniqid значительно изменится; Я ожидал бы создания других расширений для предоставления разных форматов. Another comment in uniqid documentation показывает реализацию UUID, совместимую с RFC 4211. Был также обсужден on stackoverflow about it.

0

Я нашел это на сайте PHP: http://www.php.net/manual/en/function.uniqid.php#95001

Если это верить, то версия 13 символов полностью шестигранный. Однако версия 23 персонаж:

  • 14 символов (шест)
  • затем точка
  • затем еще 8 символов (десятичное)

Если вы должны быть полностью уверены, вам можете проверить это самостоятельно: http://sandbox.onlinephpfunctions.com/code/c04c7854b764faee2548180eddb8c23288dcb5f7

Смежные вопросы