Как я могу создать al oop для подсказки, когда ответ неприемлем для критерия? - PullRequest
1 голос
/ 01 августа 2020

, так что я работал над генератором паролей, и он у меня работает помимо двух вещей. Пароль должен быть длиной от 8 до 128 символов. У меня есть подсказка, которая спрашивает пользователя, какой длины он хотел бы пароль, а затем несколько других подсказок о включении символов, прописных, строчных и цифровых символов. Однако, когда пользователь отвечает чем-нибудь ниже 8 или выше 128, я хотел бы, чтобы в предупреждении говорилось, что "пароль должен быть не менее 8 символов и короче 128", а затем l oop обратно к подсказке, снова спрашивая, как долго они будут вроде пароль должен быть.

не могу хоть убей разобраться как это сделать. очевидным решением для меня было некоторое время l oop, однако у меня нет опыта в их создании.

Я также хочу, чтобы перед завершением работы системы «подтверждения» был выбран как минимум один тип символа, и до l oop вернуться к началу подтверждения для верхнего, нижнего, символов и чисел, поэтому пользователь должен выбрать хотя бы один.

любая помощь будет принята с благодарностью.

спасибо!

вот код для длины пароля

var passLength;

while (passLength >= 129 || passLength <= 7) {
  passLength = parseInt(prompt('How many charcters would you like? (8-128)'))
    if (passLength <= 128 || passLength >= 8) {
        break;
    }
  alert("Password length must be 8 to 128 characters long!");
}

вот код для отдельных символов, из которых мне нужно выбрать хотя бы один.

var chosenCharactersArr = []
var passwordstring = ''

if (confirm('would you like Capital letters?')) {
  chosenCharactersArr.push(upperCase)
}

if (confirm('would you like to include lowercase letters?')) {
  chosenCharactersArr.push(lowerCase)
}

if (confirm('would you like to include numbers?')) {
  chosenCharactersArr.push(numbers)
}

if (confirm('would you like to include symbols?')) {
  chosenCharactersArr.push(symbols)
}

1 Ответ

1 голос
/ 01 августа 2020

У вас есть ошибка при проверке длины. Вы не можете использовать || в этом случае, потому что вы хотите проверить правильность нижнего и верхнего пределов, поэтому &&.

Для цикла вопросов вы можете использовать while (true) l oop, что вы можете break после того, как закончите с вопросами, то есть config в вашем случае.

Я использую объект для хранения значений конфигурации со значениями по умолчанию. Вы также можете использовать массив. Однако нужно как-то управлять индексами.

const TYPE_NUMBER = 0;
const TYPE_BOOLEAN = 1;
const TYPE_STRING = 2;

const config = {
  len: 8,
  upc: false,
  loc: false,
  num: false,
  sym: false
};

while (true) {
  const len = ask('How many charcters would you like? (8-128)', TYPE_NUMBER);
  if (len <= 128 && len >= 8) {
    config.len = len; break;
  } else {
    alert("Password must be 8 to 128 characters long!");
  }
}

const upc = ask('Would you like to use capital letters?', TYPE_BOOLEAN);
if (upc) { config.upc = upc; }

// ... repeat the same for the other questions ...

console.log(config);

function ask(msg, type) {
  let result;
  if (type === TYPE_BOOLEAN) {
    result = confirm(msg);
  } else if (type === TYPE_NUMBER) {
    result = parseInt(prompt(msg));
  } else if (type === TYPE_STRING) {
    result = prompt(msg);
  } else {
    result = "";
  }
  return result;
}
...