Почему метод Str::ulid() в Laravel всегда возвращает ulid в верхнем регистре?

Я использую Laravel, и когда я получаю результат этого метода:

      return (string) Str::ulid();

он возвращает это:

01H32R5Z0NDY1WRYWKWT20ZQYM

Я пытался получить что-то вроде этого:

01gd6r360bp37zj17nxb55yv40

Я бы хотел, чтобы он возвращал сочетание прописных и строчных букв, а не только прописных, это странно, потому что в документации laravel показано сочетание прописных и строчных букв.

1 ответ

ULID не поддерживает смешанный регистр. Вы можете использовать функцию, которая может преобразовать любой регистр в смешанный регистр:

      function toMixCase(string $string): string
{
    $result = strtolower($string);
    $length = strlen($result);
    $numberOrUpperSymbols = random_int(0, $length - 1);

    for ($i = 0; $i < $numberOrUpperSymbols; $i++) {
        $randomIndex = random_int(0, $length - 1);
        $result[$randomIndex] = strtoupper($result[$randomIndex]);
    }

    return $result;
}

$ulid = toMixCase(Str::ulid()->toString());

Или вы просто можете использоватьStr::random(26). Это не ULID, но в этом случае вы получите случайную строку со смешанным регистром по умолчанию.

Другие вопросы по тегам