好的,现在我已经能够通过将 length 属性添加到 while 循环来解决 Length 问题。但是,当我生成 noSpecialCharacter() 时,它会在生成的密码前面给我 NaN。
这是函数:
const noSpecialCharacters = () => {
let password;
for (let i = 0; i < askUser; i++) {
let result3 = characterSet[randomCharacter()];
password += result3;
}
return password;
}
let askUser;
// create a function for prompts
const prompts = () => {
const minLength = 8;
const maxLength = 128;
askUser = null
while (askUser === null || askUser.length < minLength || askUser.length > maxLength) {
// ask the user again
askUser = prompt('Enter a password character length. Character length must be at least 8 and between 128.');
let confirmSpecialCharacter;
// if password is between length range
if (askUser >= minLength && askUser <= maxLength) {
// ask for special characters
confirmSpecialCharacter = confirm('Would you like for your password to include special characters?');
// if yes, call combine random
let pass = confirmSpecialCharacter === true ? combineRandom() : noSpecialCharacters();
alert(pass);
}
}
return askUser;
}
prompts();
答案 0 :(得分:2)
检查长度时,使用 askUser.length 但是按照这个逻辑,当用户第一次输入正确时,wile 循环中的任何内容都不会运行。
更好的方法是初始化 askUser = null 并将 while 中的条件设置为:
while (askUser === null || askUser.length < minLength || askUser.length > maxLength)
首先检查 askUser 是否为空
let askUser;
// create a function for prompts
const prompts = () => {
const minLength = 8;
const maxLength = 128;
askUser = null
while (askUser === null || askUser.length < minLength || askUser.length > maxLength) {
// ask the user again
askUser = prompt('Enter a password character length. Character length must be at least 8 and between 128.');
let confirmSpecialCharacter;
// if password is between length range
if (askUser.length >= minLength && askUser.length <= maxLength) {
// ask for special characters
confirmSpecialCharacter = confirm('Would you like for your password to include special characters?');
// if yes, call combine random
if (confirmSpecialCharacter === 'yes') {
let pass = combineRandom();
alert(pass);
} else {
let pass = noSpecialCharacters();
alert(pass);
}
}
}
return askUser;
}
prompts()
答案 1 :(得分:1)
由于人们通过在 .length
中添加 askUser
解决了您的问题,我在这里建议您通过继续调用将代码从 while
循环重构为 recursive函数本身,直到它通过验证。 (代码未经测试)
使用此方法,您可以通过 return
early 防止嵌套条件。
// create a function for prompts
const prompts = () => {
const minLength = 8;
const maxLength = 128;
// ask the user
let askUser = prompt('Enter a password character length. Character length must be at least 8 and between 128.');
// keep asking the function itself until it passed the validation
if (askUser.length <= minLength || askUser.length >= maxLength || askUser === null) {
return prompts()
}
// ask for special characters
let confirmSpecialCharacter = confirm('Would you like for your password to include special characters?');
let pass;
// if yes, call combine random
if (confirmSpecialCharacter) {
pass = combineRandom();
} else {
pass = noSpecialCharacters();
}
alert(pass);
return askUser;
}
使用三元条件,您可以获得更短的代码。
// if yes, call combine random
let pass = confirmSpecialCharacter ? combineRandom() : noSpecialCharacters();
答案 2 :(得分:0)
在您的 while 条件下,您实际上并未检查 <div class="grid-container">
<div>
<div>1</div>
</div>
<div>
<div>2</div>
</div>
<div>
<div>3</div>
</div>
<div>
<div>4</div>
</div>
</div>
长度。将其更改为此行:askUser
它将起作用。