簡體   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