任务是提示用户输入密码的长度和字符类型,然后生成一个随机密码。我认为for循环无法正常工作。 retVal返回空,因为for循环没有传递任何东西。我试着去掉charAt函数,让Math.floor给我公正和索引,这给了我undefinedundefinedundefinedundefinedundefinedundefined。回到常规的charAt函数,我什么也没得到。
result <- c(NA,1,NA,2,3,NA,NA,4,NA,5)
答案 0 :(得分:1)
您遇到了一些微妙的问题。
prompt
返回一个字符串,您需要将其转换为数字以用于您的长度(Number(prompt(...))
)。toLowerCase
是方法,而不是属性,您必须调用它(charType.toLowerCase()
)。您还只需执行一次,如果将其设置为变量,就可以避免重新计算。charSet.length
)。
var length = Number(prompt("How many characters will your password be? Enter a number between 8 and 128"));
//ask for character type
var charType = prompt("Enter a character type: special, numeric, uppercase, lowercase.");
//generate password
function generatePassword() {
//evaluate character type
var charSet = "";
var charTypeLower = charType.toLowerCase();
if( charTypeLower === "lowercase" ) {
charSet = "abcdefghijklmnopqrstuvwxyz";
} else if( charTypeLower === "uppercase" ) {
charSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
} else if( charTypeLower === "numeric" ) {
charSet = "0123456789";
} else if( charTypeLower === "special" ) {
charSet = " !\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~";
}
//return value
var retVal = "";
for (var i = 0; i < length; i++) {
//picks a character within charSet at index of random number
retVal += charSet.charAt(Math.floor(Math.random() * charSet.length));
}
return retVal;
}
alert(generatePassword());
我猜这只是出于学习目的,但是如果您想生成密码安全的密码,则应该使用基于crypto.getRandomValues
(see this question)的随机数生成器。
答案 1 :(得分:0)
charType.toLowerCase
是一个函数,您想要的是
charType.toLowerCase()
,这是函数的结果。
答案 2 :(得分:-1)
此答案不适合分配情况!
对于这种棘手的情况,我宁愿不发明一次又一次的发明。
该软件包每周大约有4万次下载:generate-password npm github repo。
它不会从输入生成密码,但是例如可以根据输入的长度和数字的存在来生成密码。有趣的选项可用。
var generator = require('generate-password');
var password = generator.generate({
length: 10,
numbers: true
});
// 'uEyMTw32v9'
console.log(password);