javascript - 使用随机密码生成器
问题描述
我正在尝试使用以下代码生成随机密码。当我运行它时,我变得不确定。
我的“未定义”来自哪里?**
```
// 赋值代码
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);
```
解决方案
我修复了您的代码并在代码段中进行了一些观察
// 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">
推荐阅读
- reactjs - 搜索按钮以激活自动完成谷歌地图位置(React.js)
- javascript - 沿 D3.js 中的简单线条路径为外部 svg 对象设置动画
- django - 更新用 django 传递的变量包含标签
- .net - 适用于 .NET 的 Googla Analytics 测量协议库
- javascript - 对象打印为字符串
- nginx - Ngix 配置不起作用。(阻止文件访问)
- javascript - 手动更改事件未触发
- python - 熊猫从上面的行中获取差异的比率并将值存储在另一列中,具有多索引
- python - 从烧瓶 webapp 获取 URL 并将抓取的项目保存在 SQLite3 数据库中。不确定是否调用了 process_item
- php - do_action 在其位置之前返回值