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