【发布时间】:2020-04-07 23:40:24
【问题描述】:
我正在尝试创建一个随机密码生成器,它要求用户输入大小为 8-128 个字符,然后确认使用大写、小写、符号和/或数字。我正在尝试获取密码以在文本区域中生成和打印,我知道我遗漏了一些东西,但我不确定是什么。我为粗略的代码道歉。我才刚开始。
var plength = prompt("How many characters would you like your password to be?")
if (plength < 8 || plength > 128){
alert("Length must be 8-128 characters")
}
if (plength >= 8 && plength <= 128){
var cuppercase = confirm("Would you like to use uppercase letters?")
var clowercase = confirm("Would you like to use lowercase letters?")
var cnumbers = confirm("would you like to use numbers?")
var csymbols = confirm("would you like to use special characters?")
}
if (cuppercase != true && clowercase != true && cnumbers != true && csymbols != true){
alert("You must select at least one character type!")
}
//DOM elements
const resultEl = document.getElementById('password');
document.getElementById('generate').addEventListener('click', () => {
const hasLower = clowercase.true;
const hasUpper = cuppercase.true;
const hasNumber = cnumbers.true;
const hasSymbol = csymbols.true;
resultEl.innerText = generatePassword(hasLower, hasUpper, hasNumber, hasSymbol, length);
});
const randomFunc = {
lower: getRandomLower,
upper: getRandomUpper,
number: getRandomNumber,
symbol: getRandomSymbol
}
document.getElementById('clipboard').addEventListener('click', () => {
const textarea = document.createElement('textarea');
const password = resultEl.innerText;
if(!password) { return; }
textarea.value = password;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
textarea.remove();
alert('Password copied to clipboard');
});
function generatePassword(lower, upper, number, symbol, length) {
let generatedPassword = '';
const typesCount = lower + upper + number + symbol;
const typesArr = [{lower}, {upper}, {number}, {symbol}].filter(item => Object.values(item)[0]);
// create a loop
for(let i=0; i<length; i+=typesCount) {
typesArr.forEach(type => {
const funcName = Object.keys(type)[0];
generatedPassword += randomFunc[funcName]();
});
}
const finalPassword = generatedPassword.slice(0, length);
return finalPassword;
}
// Generator functions
function getRandomLower() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 97);
}
function getRandomUpper() {
return String.fromCharCode(Math.floor(Math.random() * 26) + 65);
}
function getRandomNumber() {
return +String.fromCharCode(Math.floor(Math.random() * 10) + 48);
}
function getRandomSymbol() {
const symbols = '!@#$%^&*(){}[]=<>/,.'
return symbols[Math.floor(Math.random() * symbols.length)];
}
<header>
<h1 class="text-center" style= "margin-top: 20px;">Password Generator</h1>
</header>
<div class="card shadow-sm p-3 mb-5 bg-white rounded" style="max-width: 60%; margin: 40px auto;">
<div class="card-body">
<h2 class="card-title">Generate a Password</h2>
<textarea
style= "width: 100%; text-align:center; resize:none; border: dashed 2px lightgrey; margin:30px auto; padding: 10px auto; min-height: 100px;"
readonly
id="password"
placeholder="Your Secure Password"
aria-label="Generated Password"
></textarea>
<button type="button" class="btn btn-danger" id= "generate" style= "float:left; border-radius:40px; padding-right: 30px; padding-left: 30px;">Generate Password</button>
<button type="button" class="btn btn-light" id= "clipboard" style= "float:right; border-radius:40px; padding-right: 30px; padding-left: 30px; background-color: silver; color:white">Copy to clipboard</button>
</div>
</div>
【问题讨论】:
标签: javascript passwords generator prompt confirm