Javascript 密码生成器,如何使其返回足够强的密码

Javascript 密码生成器,如何使其返回足够强的密码,javascript,ecmascript-6,Javascript,Ecmascript 6,我创建了一个简单的密码生成器,它也支持强度检查。然而,如果它不能生成足够强的密码,我很难决定它应该如何运行。此时,它只显示一条创建失败消息 如果创建的密码不够强,我应该定义密码创建规则还是让函数重新启动?如有任何意见、建议或线索,我们将不胜感激。谢谢 代码可以在下面找到 'use strict'; let generatePassword = function(passwordLength = 10) { let alphabetString = "QWERTYUIOPASDFGHJ

我创建了一个简单的密码生成器,它也支持强度检查。然而,如果它不能生成足够强的密码,我很难决定它应该如何运行。此时,它只显示一条创建失败消息

如果创建的密码不够强,我应该定义密码创建规则还是让函数重新启动?如有任何意见、建议或线索,我们将不胜感激。谢谢

代码可以在下面找到

'use strict'; 


let generatePassword = function(passwordLength = 10) {

  let alphabetString = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-_=+[]{}!@#$%^&*();:'|\,<.>/?`",
  alphabet = alphabetString.split("",),
  passwordArray = [],

  getRandomSymbol = function() {
    return alphabet[Math.floor(Math.random()*alphabet.length)]
  };

  for (let i = 0; i < passwordLength; i++) {
    passwordArray.push(getRandomSymbol());
  } 

  let password = passwordArray.join(""),
  passwordStrengthCheck = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");

  if (password.match(passwordStrengthCheck)) {
    return console.log(`Your password is: ${password}`);
  } else {
    console.log("Failed to generate a strong enough password");
  }
}


// Function call sample:

generatePassword();  
“严格使用”;
让generatePassword=函数(passwordLength=10){
让alphabetString=“QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-\=+[]{}!@$%^&*():“\\,/?”,
字母表=字母表字符串拆分(“,”),
passwordArray=[],
getRandomSymbol=函数(){
返回字母表[Math.floor(Math.random()*alphabet.length)]
};
for(设i=0;i
要确保密码至少包含所有组的一个符号,请执行以下操作:

  • 从每组中随机选取字符(1个来自大写字母,1个来自小写字母,1个数字…)
  • all
  • 洗牌
  • 代码:

    let generatePassword = function(passwordLength = 10) {
    
      let capitals = "QWERTYUIOPASDFGHJKLZXCVBNM";
      let small = "qwertyuiopasdfghjklzxcvbnm";
      let digits = "1234567890";
      let symbols = "-_=+[]{}!@#$%^&*();:'|\,<.>/?`",
      let all = capitals + small + digits + symbols;
    
    
      getRandomSymbol = function(sourceString) {
        return sourceString[Math.floor(Math.random()*sourceString.length)]
      };
    
    
      alphabet = alphabetString.split("",),
      passwordArray = [],
    
      passwordArray.push(getRandomSymbol(capitals));
      passwordArray.push(getRandomSymbol(small));
      passwordArray.push(getRandomSymbol(digits));
      passwordArray.push(getRandomSymbol(symbols));
    
    
    
      for (let i = 0; i < passwordLength - 4; i++) {
        passwordArray.push(getRandomSymbol(all));
      } 
    
    
      shuffle = function (a) {
        for (let i = a.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [a[i], a[j]] = [a[j], a[i]];
        }
        return a;
      }
    
      let password = shuffle(passwordArray).join(""),
    
      passwordStrengthCheck = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
    
      if (password.match(passwordStrengthCheck)) {
        return console.log(`Your password is: ${password}`);
      } else {
        console.log("Failed to generate a strong enough password");
      }
    }
    
    let generatePassword=函数(passwordLength=10){
    让大写字母=“qwertyuiopasdfghjklzxcvnm”;
    设为small=“qwertyuiopasdfghjklzxcvnm”;
    设为digits=“1234567890”;
    让symbols=“-\=+[]{}!@$%^&*();:'|\,/?`”,
    全部=大写+小写+数字+符号;
    getRandomSymbol=函数(sourceString){
    返回sourceString[Math.floor(Math.random()*sourceString.length)]
    };
    字母表=字母表字符串拆分(“,”),
    passwordArray=[],
    push(getRandomSymbol(大写));
    push(getRandomSymbol(小));
    push(getRandomSymbol(数字));
    push(getRandomSymbol(symbols));
    for(设i=0;i0;i--){
    常数j=数学楼层(数学随机()*(i+1));
    [a[i],a[j]=[a[j],a[i]];
    }
    返回a;
    }
    让password=shuffle(passwordArray).join(“”),
    passwordStrengthCheck=newregexp(“^(?=.[a-z])(?=.[a-z])(?=.[0-9])(?=.[!@\$%\^&*])(?=.{8,}”);
    if(password.match(passwordStrengthCheck)){
    return console.log(`您的密码是:${password}`);
    }否则{
    log(“未能生成足够强的密码”);
    }
    }
    
    不太可能,但是如果这是严肃的,而不仅仅是一个测试,考虑一下如果你还没有准备好,不管怎样,你的问题并没有一个明确的问题陈述-如果代码已经工作了,如果你想要一些基于意见的答案,关于它可能如何更好地制定,它更适合于代码评审,而不是here@CertainPerformance它有一个非常明确的问题陈述。“如果生成的密码不够强,程序如何失败”。唯一明智的解决方案是生成一个更强大的密码作为响应,但这已经足够清楚了。对我来说,这听起来像是一个XY问题,那么找到一个总是生成足够强大密码的算法呢?否则,也许你可以“重复这一代直到足够强大”?还可以查看@CertainPerformance链接;)我建议访问
    npm站点
    ,并学习一个为您提供此功能的模块。有很多!例如=>无需重新发明车轮!