const range = (start, stop, step) =>
Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step);
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
var passwordLength = window.prompt('Please choose a password length between 8 and 128 characters:');
const valid_lengths = range(8,128,1);
// Gives: [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128]
while ( !valid_lengths.includes(passwordLength) ){
var passwordLength = window.prompt('Invalid input. Please try again. Please input a password length that is an integer between 8 and 128 characters:');
}
console.log("The valid passwordLength is: " + passwordLength);
It seems that the code cannot break out of the while loop even if the user enters a passwordLength that is included in the array, such as 33, (when the while condition fails, we expect the code to break out of the while loop). Where is my logic failing here?
I have tried inputs to the passwordLength prompt that are both included 8, 33, 44, 120, and not included 1, 0, 150, in the given array – but the while loop persists regardless.
Edit: to clarify – the prompt is for a password generator, where the user is telling the website how long they would like their randomly generated password to be.
>Solution :
The return value of window.prompt is string.
( https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt#return_value )
Therefore, you need to cast it to number.
For example,
var passwordLengthStr = window.prompt('...');
var passwordLength = parseInt(passwordLengthStr);