当答案对于某个标准不可接受时,如何创建提示循环?

问题描述 投票:0回答:2

所以我一直在开发一个密码生成器,除了两件事之外我还让它工作。密码长度必须在 8-128 个字符之间。我有一个提示,询问用户希望密码有多长,然后是一些其他提示,包括符号、大写字母、小写字母和数字。但是,当用户回答低于 8 或高于 128 的任何内容时,我希望收到一条警告,提示“密码必须至少有 8 个字符长且短于 128”,然后循环回到提示,再次询问他们想要密码多长成为。

我一辈子都不知道该怎么做。对我来说显而易见的解决方案是 while 循环,但我在构建这些循环方面没有经验。

我还希望在“确认”系统结束之前至少选择一种字符类型,并循环回到大写、小写、符号和数字的确认开头,以便用户必须至少选择一种。

任何帮助将不胜感激。

谢谢你!

这是密码长度的代码

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)
}
javascript loops while-loop prompt confirm
2个回答
1
投票

您的长度检查有误。在这种情况下,您不能使用

||
,因为您想要检查下限和上限是否都有效,因此
&&

对于问题循环,您可以使用

while (true)
循环,一旦您完成了问题,即案例中的配置,就可以
break
循环。

我使用一个对象来存储默认的配置值。您还可以使用数组。但是,您必须以某种方式管理索引。

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;
}


0
投票

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; }
const loc = ask('Would you like to use lower case letters?', TYPE_BOOLEAN);
if (loc) { config.loc = loc; }
const num = ask('Would you like to use Numbers?', TYPE_BOOLEAN);
if (num) { config.num = num; }
const sym = ask('Would you like to use symbols?', TYPE_BOOLEAN);
if (sym) { config.sym = sym; }

// ... 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;
}
let answer = prompt("What is your password?")
alert(answer + " Is your password.")

© www.soinside.com 2019 - 2024. All rights reserved.