首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机密码生成器返回顺序密码而不是随机密码。(JavaScript)

随机密码生成器返回顺序密码而不是随机密码。(JavaScript)
EN

Stack Overflow用户
提问于 2022-09-18 19:00:49
回答 3查看 65关注 0票数 0

我正在为一个类开发一个随机密码生成器,它几乎已经被计算出来了,但是它不是随机返回密码,而是返回orderly...("abcdefghijklmnopqrstuvwxyz12343..")从其他人的错误来看,我猜是在我的随机变量中。

如有任何帮助,将不胜感激!)

代码语言:javascript
复制
var generateBtn = document.querySelector("#generate");

function getPass() {
var upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var upperArray = upperCase.split("");
var lowerCase = "abcdefghijklmnopqrstuvwxyz";
var lowerArray = lowerCase.split("");
var num = "0123456789";
var numArray = num.split("")
var specials = "!@#$%^&*()_+?<>";
var specialsArray = specials.split("");
allCharacters = [];


password = "";

var length = prompt("How many characters would you like your password to be?            Min-8 Max-128");

if (length < 8 || length > 128) {
    alert("Password must be between defined range.");
    getPass()
  }
  if (confirm("Do you want uppercase letters?")) {
    allCharacters.push(upperArray);
  }
  if (confirm("Do you want lowercase letters?")){
    allCharacters.push(lowerArray);
  }
  if (confirm("Do you want numbers?")){
    allCharacters.push(numArray);
  }
  if (confirm("Do you want special characters ie. !, @, #, $, ?")){
    allCharacters.push(specialsArray);
  }
  for (var i = 0; i < length; i++){
    var random = Math.floor(Math.random() * Math.floor(allCharacters.length));
    password += allCharacters[random];
  }
  
  return password;

}

generateBtn.addEventListener("click", putPass);**strong text**


function putPass() {
    var password = getPass();
    var passwordText = document.querySelector("#password");
    passwordText.value = password;
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-18 19:10:43

把你所有的

代码语言:javascript
复制
allCharacters.push(upperArray);

使用

代码语言:javascript
复制
allCharacters = allCharacters.concat(upperArray);

(类似于其他群体)

方法的问题在于将数组放入allCharacters数组中,而不是将这些数组的内容放入该数组中。而且,即使选择了每个组,而不是多个不同的字符,候选数组也只包含4个其他数组,然后从其中进行选择。

注意,您的代码中仍然存在一个问题,如果没有选择组,那么密码就不会正确生成。你可以让其中一个组不是可选的。

代码语言:javascript
复制
    function getPass() {
    var upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var upperArray = upperCase.split("");
    var lowerCase = "abcdefghijklmnopqrstuvwxyz";
    var lowerArray = lowerCase.split("");
    var num = "0123456789";
    var numArray = num.split("")
    var specials = "!@#$%^&*()_+?<>";
    var specialsArray = specials.split("");
    allCharacters = [];


    password = "";

    var length = prompt("How many characters would you like your password to be?            Min-8 Max-128");

    if (length < 8 || length > 128) {
        alert("Password must be between defined range.");
        getPass()
      }
      if (confirm("Do you want uppercase letters?")) {
        allCharacters = allCharacters.concat(upperArray);
      }
      if (confirm("Do you want lowercase letters?")){
        allCharacters = allCharacters.concat(lowerArray);
      }
      if (confirm("Do you want numbers?")){
        allCharacters = allCharacters.concat(numArray);
      }
      if (confirm("Do you want special characters ie. !, @, #, $, ?")){
        allCharacters = allCharacters.concat(specialsArray);
      }
      for (var i = 0; i < length; i++){
        var random = Math.floor(Math.random() * Math.floor(allCharacters.length));
        password += allCharacters[random];
      }
      
      return password;

    }
  
window.alert( `The random password is ${getPass()}` );

票数 1
EN

Stack Overflow用户

发布于 2022-09-18 19:14:09

allCharacters.push(specialsArray)不像你想的那样工作

您只需将整个数组推入现有的数组中。

代码语言:javascript
复制
const a = [1, 2, 3]
const b = [4, 5, 6]
a.push(b)
console.log(a)

但是你想把这些东西推过去:

代码语言:javascript
复制
const a = [1, 2, 3]
const b = [4, 5, 6]
a.push(...b)
console.log(a)

整个代码:

代码语言:javascript
复制
var generateBtn = document.querySelector("#generate");

function getPass() {
  var upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var upperArray = upperCase.split("");
  var lowerCase = "abcdefghijklmnopqrstuvwxyz";
  var lowerArray = lowerCase.split("");
  var num = "0123456789";
  var numArray = num.split("")
  var specials = "!@#$%^&*()_+?<>";
  var specialsArray = specials.split("");
  allCharacters = [];


  password = "";

  var length = prompt("How many characters would you like your password to be?            Min-8 Max-128");

  if (length < 8 || length > 128) {
    alert("Password must be between defined range.");
    getPass()
  }
  if (confirm("Do you want uppercase letters?")) {
    allCharacters.push(...upperArray);
  }
  if (confirm("Do you want lowercase letters?")) {
    allCharacters.push(...lowerArray);
  }
  if (confirm("Do you want numbers?")) {
    allCharacters.push(...numArray);
  }
  if (confirm("Do you want special characters ie. !, @, #, $, ?")) {
    allCharacters.push(...specialsArray);
  }
  for (var i = 0; i < length; i++) {
    var random = Math.floor(Math.random() * Math.floor(allCharacters.length));
    password += allCharacters[random];
  }

  return password;

}

generateBtn.addEventListener("click", putPass);


function putPass() {
  var password = getPass();
  console.log(password)
  var passwordText = document.querySelector("#password");
  passwordText.value = password;
}
代码语言:javascript
复制
<button id="generate">generate</button>
<p id="password"></p>

附注:

请注意,您的代码在密码方面不安全,不应该用于生成真正的密码。

票数 1
EN

Stack Overflow用户

发布于 2022-09-18 20:36:41

我使用以下方法推送整个数组:

代码语言:javascript
复制
allCharacters.push(upperArray);

而不是

代码语言:javascript
复制
allCharacters.push(...upperArray);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73765662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档