[英]Generate random password based on user input in Javascript
任务是提示用户输入密码的长度和字符类型,然后生成一个随机密码。 我认为 for 循环工作不正常。 retVal 返回空,因为 for 循环没有传递任何东西。 我尝试删除 charAt 函数并让 Math.floor 给我公正和索引,这只是给了我 undefinedundefinedundefinedundefinedundefinedundefined。 回到常规的 charAt 函数,我什么也没得到。
//ask for length var length = 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 = ""; if( charType.toLowerCase === "lowercase" ) { charSet = "abcdefghijklmnopqrstuvwxyz"; } else if( charType.toLowerCase === "uppercase" ) { charSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; } else if( charType.toLowerCase === "numeric" ) { charSet = "0123456789"; } else if( charType.toLowerCase === "special" ) { charSet = " !\\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; } //return value var retVal = ""; //for (var i = 0, n = charSet.length; i < length; i++) { for (var i = 0, n = length; i < length; i++) { //picks a character within charSet at index of random number retVal += charSet.charAt(Math.floor(Math.random() * n)); } console.log(retVal); return retVal; }
您遇到了一些微妙的问题。
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
的随机数生成器( 请参阅此问题)。
charType.toLowerCase
是一个函数,你想要的是charType.toLowerCase()
,它是函数的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.