首页 > 解决方案 > 使用随机密码生成器

问题描述

我正在尝试使用以下代码生成随机密码。当我运行它时,我变得不确定。

我的“未定义”来自哪里?**

```

// 赋值代码

   var charString = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklnmopqrstuvwxyz", "0123456789", 
 "~!@#$%^&*()-_=+"];


 var userInput = [];

 var password = "";

 var generateBtn = document.querySelector("#generate");

    // Write password to the #password input
  function writePassword() {
 password = generatePassword();
   var passwordText = document.querySelector("#password");

  passwordText.value = password;

 }

 // Character length prompt
 function generatePassword() {
  var characterLength = 0
   while ((characterLength < 8 || characterLength > 128) || Number.isInteger(characterLength) === 
false) {
 characterLength = parseInt(prompt("How many characters would you like your password to be? (8- 
128)"));

   }

   var upper = false
   var lower = false
   var number = false
    var symbol = false

  while (!upper && !lower && !number && !symbol) {

  // Uppercase pop up
    upper = confirm("Click OK to confirm uppercase characters");

   // Lowercase pop up
   lower = confirm("Click OK to confirm lowercase characters");

   // Numeric pop up
   number = confirm("Click OK to confirm numeric characters");

   // Special charcter  pop up
  symbol = confirm("Click OK to confirm special characters (~!@#$%^&*()-_=+)");

  }

   if (upper) {
      userInput += charString[0];

   }

   if (lower) {
      userInput += charString[1]

   }


    if (number) {
     userInput += charString[2]

     }


    if (symbol) {
     userInput += charString[3]

     }

     var password = "";

   for (var i = 1; i <= userInput.length; i++) {
      var index = (Math.floor(Math.random) * userInput);
     password = password + userInput[index]
  }

  return password

}



// Add event listener to generate button
 generateBtn.addEventListener("click", writePassword);


```

标签: javascript

解决方案


我修复了您的代码并在代码段中进行了一些观察

// Assignment Code

var charString = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklnmopqrstuvwxyz", "0123456789", "~!@#$%^&*()-_=+"];

var userInput = [];

var password = "";

var generateBtn = document.querySelector("#generate");

// Write password to the #password input
function writePassword() {
    password = generatePassword();
    var passwordText = document.querySelector("#password");

    passwordText.value = password;
}

// Character length prompt
function generatePassword() {
    var characterLength = 0
    while ((characterLength < 8 || characterLength > 128) || Number.isInteger(characterLength) === false) {
        characterLength = parseInt(prompt("How many characters would you like your password to be? (8-128)"));
    }

    var upper = false
    var lower = false
    var number = false
    var symbol = false

    while (!upper && !lower && !number && !symbol) {

        // Uppercase pop up
        upper = confirm("Click OK to confirm uppercase characters");

        // Lowercase pop up
        lower = confirm("Click OK to confirm lowercase characters");

        // Numeric pop up
        number = confirm("Click OK to confirm numeric characters");

        // Special charcter  pop up
        symbol = confirm("Click OK to confirm special characters (~!@#$%^&*()-_=+)");
    }

    // userInput is an array, so you should push values into it.
    if (upper) {
        userInput.push(charString[0]);
    }

    if (lower) {
        userInput.push(charString[1])
    }

    if (number) {
        userInput.push(charString[2])
    }

    if (symbol) {
        userInput.push(charString[3])
    }

    var password = "";

    // join all array elements into a single one, and then split in order
    // to get an array of characters
    userInput = userInput.join("").split("");

    // You should start your for statement at position 0, not 1
    // and I guess it should be < than characterLength, not userInput.length
    for (var i = 0; i < characterLength; i++) {
        // Math.random is a function so you were missing the parenthesis Math.random()
        // also Math.random() should be times userInput.length
        // so they should be inside the same parenthesis
        var index = (Math.floor(Math.random() * userInput.length));
        password = password + userInput[index]
    }

    return password
}

// Add event listener to generate button
generateBtn.addEventListener("click", writePassword);
<button id="generate">Generate</button>
<br>
<input type="text" id="password">


推荐阅读