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

时间:2019-12-27 18:04:51

标签: javascript string random return

任务是提示用户输入密码的长度和字符类型,然后生成一个随机密码。我认为for循环无法正常工作。 retVal返回空,因为for循环没有传递任何东西。我试着去掉charAt函数,让Math.floor给我公正和索引,这给了我undefinedundefinedundefinedundefinedundefinedundefined。回到常规的charAt函数,我什么也没得到。

result <- c(NA,1,NA,2,3,NA,NA,4,NA,5)

3 个答案:

答案 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.getRandomValuessee 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);