генерирование случайной строки из регулярного выражения в машинописи - PullRequest
0 голосов
/ 23 апреля 2020

Моя функция в настоящее время генерирует случайную строку, состоящую из цифр, прописных и строчных букв.

/**
 * generate random string
 * @param {number} length
 * @returns {string}
 */
static generateRandomString(length: number): string {
    return Math.random()
        .toString(36)
        .replace(/[^a-zA-Z0-9]+/g, '')
        .substr(0, length);
}

Я бы хотел, чтобы она генерировала только заглавные буквы и цифры. Я сделал это, но это не работает:

  .replace(/[^A-Z0-9]+/g, '')

1 Ответ

0 голосов
/ 24 апреля 2020

Это адский способ создания случайных строк.

number#toString(36) сделает так, что вы получите значения от 0 до z, которые не включают заглавные буквы. Вот способ исправить это, просто используя метод string#toUpperCase для преобразования строчных в верхний регистр.

/**
 * generate random string
 */
function generateRandomString(length: number): string {
    return Math.random()
        .toString(36)
        //.replace(/[^a-z0-9]+/g, '') // Regex isn't necessary here
        .replace('.','') // There's only ever one non [a-z0-9] character in this
        .toUpperCase()
        .substr(0, length);
}

Вот еще один способ сделать это, который позволяет правильно контролировать длину и помогает убедиться, что случайный персонажи ближе к тому, чтобы быть действительно случайными. Обратите внимание, что здесь нет необходимости в регулярных выражениях.

/**
 * generate random string
 */
function generateRandomString(length:number): string {
  return new Array(length)
    .fill(0)
    .map(() => Math.floor(Math.random() * 36).toString(36))
    .join('')
    .toUpperCase();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...