繁体   English   中英

根据用户在 Javascript 中的输入生成随机密码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM