如何在JavaScript中从ASCII字符生成随机字符串

3
我该如何构建一个简单的字符串生成器,它可以通过在方法中输入ASCII字符编号范围来创建和打印出一个由10个字符组成的随机字符串,并包括小写字母、大写字母、数字和 ASCII 表中从0到127的特殊字符?不是像变量一样的东西。
    var possibleCharacters = "01234567890abcdefgh....."

一个朋友已经用Java构建了它(见下文),那么我如何使用JavaScript构建它,而且像Java示例中一样使用for循环?
    public class Main {
public static void main(String[] args) {
    for (int counter = 0; counter <= 9; counter++) {
        int randomNum = 0 + (int)(Math.random() * 127);
        if(randomNum > 33) {
            System.out.print((char)randomNum);
        }else {
            counter--;
        }
    }
}
}

它应该只生成类似于“_e7N?:G&M0”的内容,即:

2
你的尝试是什么? 你可以使用 charCode。 - yqlim
@YongQuan 谢谢,看起来很不错。不幸的是,作为一个新手,我不知道如何编写那个方法。我也不理解我朋友的代码,以及他为什么在代码中写了一个“33”。我完全不知道如何编写整个密码生成器函数。 - MrFrontend
非常感谢@shrys,它起作用了!由于它位于我的主题下方而不是一般答案部分,我该如何点赞您的评论? - MrFrontend
1
@MrFrontend 如果你计划实现一个密码生成器函数,你不能用这种方式生成随机字符串,因为Math.random()不是加密安全的。你必须使用Web Crypto API - yqlim
@YongQuan 谢谢。非常重要的一点需要提到。但这对我的练习已经足够了。 - MrFrontend
显示剩余3条评论
1个回答

1
一个返回随机字符串的函数:

function getString() {
  var str = "";
  for (counter = 0; counter <= 9; counter++) {
    var randomNum = 0 + parseInt(Math.random() * 127);
    if (randomNum > 33) {
      str += String.fromCharCode(randomNum);
    } else {
      counter--;
    }
  }
  return str;
}
for (i = 0; i < 10; i++)
  console.log(getString());

如果您想生成33到127之间的数字:

function getString() {
  var str = "";
  for (counter = 0; counter <= 9; counter++) {
    var randomNum = 0 + parseInt(Math.floor(Math.random() * (127 - 33 + 1) + 33));
    str += String.fromCharCode(randomNum);
  }
  return str;
}
for (i = 0; i < 10; i++)
  console.log(getString());


1
再次感谢。您能告诉我在第四行(两个示例中)0 + parseInt 中的“0”是什么意思吗?当我将其删除时,似乎没有任何变化。 - MrFrontend
2
是的,我认为它没有任何作用,最好省略掉。 - shrys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接