Skip to main content
Code Review

Return to Answer

added 1459 characters in body
Source Link
kemicofa
  • 1.4k
  • 7
  • 10
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
 return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
 return list.map((value) => ({
 value,
 sort: Math.random()
 })).sort((a, b) => a.sort - b.sort).map(({
 value
 }) => value);
};
const generatePassword = (options = {}) => {
 const {
 numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
 } = options;

 const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
 const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
 const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
 const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
 const randomlyShuffledPasswordList = shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers,
 ]);
 return randomlyShuffledPasswordList.join("");
};
button.addEventListener('click', () => {
 const password = generatePassword({
 numberOfSymbols: 1Number(symbols.value),
 numberOfUppercaseLetters: 1Number(upper.value),
 numberOfLowercaseLetters: 1Number(lower.value),
 numberOfNumbers: 1Number(numbers.value)
});
console pwd.log(passwordvalue = password;
});
form {
 display: block;
 margin-left: auto;
 margin-right: auto;
 width: 75%
}
pair {
 display: block
}
<form>
 <h2>Secure Password Generator</h2>
 <pair>
 <label for="symbols">Number of symbols</label>
 <input type="number" id="symbols" value='5'>
 </pair>
 <pair>
 <label for="numbers">Number of numbers</label>
 <input type="number" id="numbers" value='5'>
 </pair>
 <pair>
 <label for="lower">Number of lowercase letters</label>
 <input type="number" id="lower" value='5'>
 </pair>
 <pair>
 <label for="upper">Number of uppercase letters</label>
 <input type="number" id="upper" value='5'>
 </pair>
 <br>
 <button type="button" id="button">Generate</button>
 <br><br>
 <pair>
 <label for="pwd">Generated password</label>
 <input type="text" id="pwd">
 </pair>
 <br><br> Inspired by <a href="https://web.archive.org/web/20220711113233/https://passwordsgenerator.net/">passwordsgenerator.net</a>
 <!-- This will never generate server side, always try to use cookies, and always autoselect the pwd-->
</form>
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
 return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
 return list.map((value) => ({
 value,
 sort: Math.random()
 })).sort((a, b) => a.sort - b.sort).map(({
 value
 }) => value);
};
const generatePassword = (options = {}) => {
 const {
 numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
 } = options;

 const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
 const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
 const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
 const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
 const randomlyShuffledPasswordList = shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers,
 ]);
 return randomlyShuffledPasswordList.join("");
};
const password = generatePassword({
 numberOfSymbols: 1,
 numberOfUppercaseLetters: 1,
 numberOfLowercaseLetters: 1,
 numberOfNumbers: 1
});
console.log(password);
const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
 return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
 return list.map((value) => ({
 value,
 sort: Math.random()
 })).sort((a, b) => a.sort - b.sort).map(({
 value
 }) => value);
};
const generatePassword = (options = {}) => {
 const {
 numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
 } = options;
 const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
 const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
 const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
 const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
 const randomlyShuffledPasswordList = shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers,
 ]);
 return randomlyShuffledPasswordList.join("");
};
button.addEventListener('click', () => {
 const password = generatePassword({
 numberOfSymbols: Number(symbols.value),
 numberOfUppercaseLetters: Number(upper.value),
 numberOfLowercaseLetters: Number(lower.value),
 numberOfNumbers: Number(numbers.value)
});
 pwd.value = password;
})
form {
 display: block;
 margin-left: auto;
 margin-right: auto;
 width: 75%
}
pair {
 display: block
}
<form>
 <h2>Secure Password Generator</h2>
 <pair>
 <label for="symbols">Number of symbols</label>
 <input type="number" id="symbols" value='5'>
 </pair>
 <pair>
 <label for="numbers">Number of numbers</label>
 <input type="number" id="numbers" value='5'>
 </pair>
 <pair>
 <label for="lower">Number of lowercase letters</label>
 <input type="number" id="lower" value='5'>
 </pair>
 <pair>
 <label for="upper">Number of uppercase letters</label>
 <input type="number" id="upper" value='5'>
 </pair>
 <br>
 <button type="button" id="button">Generate</button>
 <br><br>
 <pair>
 <label for="pwd">Generated password</label>
 <input type="text" id="pwd">
 </pair>
 <br><br> Inspired by <a href="https://web.archive.org/web/20220711113233/https://passwordsgenerator.net/">passwordsgenerator.net</a>
 <!-- This will never generate server side, always try to use cookies, and always autoselect the pwd-->
</form>
added 8 characters in body
Source Link
kemicofa
  • 1.4k
  • 7
  • 10
const shuffle = (list)=>{
 return list.map((value)=>({
 value,
 sort: Math.random()
 })).sort((a, b)=>a.sort - b.sort).map(({ value })=>value);
}
const randomlyShuffledPasswordList = {shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers, 
]);
const shuffle = (list)=>{
 return list.map((value)=>({
 value,
 sort: Math.random()
 })).sort((a, b)=>a.sort - b.sort).map(({ value })=>value);
}
const randomlyShuffledPasswordList = {
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers, 
]);
const shuffle = (list)=>{
 return list.map((value)=>({
 value,
 sort: Math.random()
 })).sort((a, b)=>a.sort - b.sort).map(({ value })=>value);
}
const randomlyShuffledPasswordList = shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers, 
]);
deleted 150 characters in body
Source Link
kemicofa
  • 1.4k
  • 7
  • 10

⚠️ generatePassword function should not be defined within the button's listener callback. We want to expose and isolate the method completely.

In any case, the characters that are to be excluded should be done at the moment you populateselect your list with letters, or numbers or symbols.

const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
 return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
 return list.map((value) => ({
 value,
 sort: Math.random()
 })).sort((a, b) => a.sort - b.sort).map(({
 value
 }) => value);
};
const generatePassword = (options = {}) => {
 const {
 numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
 } = options;
 
 const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
 const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
 const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
 const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
 const randomlyShuffledPasswordList = shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers,
 ]);
 return randomlyShuffledPasswordList.join("");
};
const password = generatePassword({
 numberOfSymbols: 1,
 numberOfUppercaseLetters: 1,
 numberOfLowercaseLetters: 1,
 numberOfNumbers: 1
});
console.log(password);

⚠️ generatePassword function should not be defined within the button's listener callback. We want to expose and isolate the method completely.

In any case, the characters that are to be excluded should be done at the moment you populate your list with letters, or numbers or symbols.

In any case, the characters that are to be excluded should be done at the moment you select your list with letters, or numbers or symbols.

const SYMBOLS = ";!#$%&*+-=?^_";
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
const NUMBERS = "1234567890";
const getRandomNumber = (max) => Math.floor(Math.random() * max);
const getRandomCharactersFromList = (list, numberOfCharacters) => {
 return new Array(numberOfCharacters).fill(undefined).map(() => list[getRandomNumber(list.length)]);
};
const shuffle = (list) => {
 return list.map((value) => ({
 value,
 sort: Math.random()
 })).sort((a, b) => a.sort - b.sort).map(({
 value
 }) => value);
};
const generatePassword = (options = {}) => {
 const {
 numberOfSymbols = 10, numberOfUppercaseLetters = 10, numberOfLowercaseLetters = 10, numberOfNumbers = 10,
 } = options;
 
 const selectedSymbols = getRandomCharactersFromList(SYMBOLS, numberOfSymbols);
 const selectedUppercaseLetters = getRandomCharactersFromList(LETTERS.toUpperCase(), numberOfUppercaseLetters);
 const selectedLowercaseLetters = getRandomCharactersFromList(LETTERS, numberOfLowercaseLetters);
 const selectedNumbers = getRandomCharactersFromList(NUMBERS, numberOfNumbers);
 const randomlyShuffledPasswordList = shuffle([
 ...selectedSymbols,
 ...selectedUppercaseLetters,
 ...selectedLowercaseLetters,
 ...selectedNumbers,
 ]);
 return randomlyShuffledPasswordList.join("");
};
const password = generatePassword({
 numberOfSymbols: 1,
 numberOfUppercaseLetters: 1,
 numberOfLowercaseLetters: 1,
 numberOfNumbers: 1
});
console.log(password);

Source Link
kemicofa
  • 1.4k
  • 7
  • 10
Loading
default

AltStyle によって変換されたページ (->オリジナル) /