【问题标题】:How can I create a loop for a prompt, when the answer is unacceptable for a criteria?当答案对于标准不可接受时,如何为提示创建循环?
【发布时间】:2024-01-04 16:16:02
【问题描述】:

所以我一直在研究密码生成器,除了两件事之外,我还让它工作。密码长度必须在 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


    【解决方案1】:

    您的长度检查有误。在这种情况下,您不能使用||,因为您想检查下限和上限是否都有效,因此&amp;&amp;

    对于问题循环,您可以使用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;
    }

    【讨论】: