I have this function to generate a random password.
My question is How do I ensure that a selected range of letters/sign/numbers is included in the result?
As an example, if I select that there must be numbers or signs in the result string, how do I check if there is at least one number or sign in the result. I have toughed about looping through numbers or signs for each member of the result, and then break the loop if I meet a character I am testing for.
The code snippet works, but without validating the result
function generatePassword() {
var base = "";
var result = "";
var latinLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
var cyrillicLetters = "????????????????????????????????????????????????????????"
var greekLetters = "?????????????????????????????????????????????????"
var numbersLetters = "1234567890"
var signsLetters = "/|()1{}[]?-_+~<>!I;:,^`.$@B%&WM*"
var armenianLetters = "?????????????????????????????????????????"
var hangulLetters = "????????????????????????"
var nordicLetters = "AaÁáBbCcDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvWwXxYyÝýZzÞþÆæÖöZzÄ䨸Åå"
var arabicLetters = "?? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"
var georgianLetters = "?????????????????????????????????"
var ethiopianLetters = "??????????????????????????"
var thaanaLetters = "?????????????????????????????????????? ? ? ? ? ? ? ??"
var hanziLetters = "?????????????????????????????????????????????????????????????????????????????????????? ? ?????"
// input
var length = document.getElementById('pwLength').value
var latin = document.getElementById('latinChecked')
var numbers = document.getElementById('numbersChecked')
var signs = document.getElementById('signsChecked')
var nordic = document.getElementById('nordicChecked')
var cyrillic = document.getElementById('cyrillicChecked')
var greek = document.getElementById('greekChecked')
var armenian = document.getElementById('armenianChecked')
var hangul = document.getElementById('hangulChecked')
var arabic = document.getElementById('arabicChecked')
var georgian = document.getElementById('georgianChecked')
var ethiopian = document.getElementById('ethiopianChecked')
var thaana = document.getElementById('thaanaChecked')
var hanzi = document.getElementById('hanziChecked')
// build source string
if (arabic.checked) { base = base + arabicLetters; }
if (latin.checked) { base = base + latinLetters; }
if (signs.checked) { base = base + signsLetters; }
if (greek.checked) { base = base + greekLetters; }
if (numbers.checked) { base = base + numbersLetters; }
if (armenian.checked) { base = base + armenianLetters; }
if (hangul.checked) { base = base + hangulLetters; }
if (numbers.checked) { base = base + numbersLetters; }
if (nordic.checked) { base = base + nordicLetters; }
if (cyrillic.checked) { base = base + cyrillicLetters; }
if (numbers.checked) { base = base + numbersLetters; }
if (georgian.checked) { base = base + georgianLetters; }
if (ethiopian.checked) { base = base + ethiopianLetters; }
if (thaana.checked) { base = base + thaanaLetters; }
if (hanzi.checked) { base = base + hanziLetters; }
// fill result
for (let i = 0; i < length; i++) {
var rand = Math.floor(Math.random() * base.length);
result = result + base.charAt(rand);
}
// write to html
document.getElementById("productX").innerHTML = result;
}