【问题标题】:How to generate a random string of letters and numbers in Javascript? [duplicate]如何在Javascript中生成随机的字母和数字字符串? [复制]
【发布时间】:2013-04-12 23:16:23
【问题描述】:

我一直在使用这个代码:

function stringGen()
{
    var text = " ";

    var charset = "abcdefghijklmnopqrstuvwxyz0123456789";

    for( var i=0; i < len; i++ )
        text += charset.charAt(Math.floor(Math.random() * charset.length));

    return text;
}

但到目前为止,它还没有起作用,就像根本一样。我做错了什么?

提前感谢您的帮助

【问题讨论】:

标签: javascript string random


【解决方案1】:

你错过了参数len

function stringGen(len) {
  var text = "";
  
  var charset = "abcdefghijklmnopqrstuvwxyz0123456789";
  
  for (var i = 0; i < len; i++)
    text += charset.charAt(Math.floor(Math.random() * charset.length));
  
  return text;
}

console.log(stringGen(3));

这会给你类似“a1z”的东西。

【讨论】:

  • +1 这个看起来比我的更正确,因为它允许您定义所需字符串的长度。
【解决方案2】:

一个漂亮的单行将是:

Math.random().toString(36).substr(2, length)

或者,如果您需要长度超过 10/11 个字符的 str:

function generateRandAlphaNumStr(len) {
  var rdmString = "";
  for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
  return  rdmString.substr(0, len);

}

【讨论】:

  • length 的最大值为 11,根据生成的随机数,有时您会得到 10 字符。
  • 是的,没错,好点 :)
  • 现在固定为“无限”长度。
  • 如果您的目标是简洁,您可以将var rdmString = "" 放入for 循环的第一部分
  • 代替子字符串,你可以更好地使用“slice()”。例如,Math.random().toString(34).slice(2);
【解决方案3】:

作为替代方案:

var len = 20,
    str = '';

while( len-- ) {
    str += String.fromCharCode( 48 + ~~(Math.random() * 42) );
}

console.log( str );

【讨论】:

  • 这不仅仅是字母数字。无论如何,OP必须在某处复制了该功能。
  • @Antony 是的,我有点懒惰。要获得纯字母数字,我们需要更多地限制 ascii 范围。但是,我觉得这是一种更通用的方法,因为它具有预定义的字符映射。
【解决方案4】:

您的 len 变量未定义。要么将其作为参数传入,要么将其设置为某个值。

function stringGen(len)
{
    var text = " ";

    var charset = "abcdefghijklmnopqrstuvwxyz0123456789";

    for( var i=0; i < len; i++ )
        text += charset.charAt(Math.floor(Math.random() * charset.length));

    return text;
}
alert(stringGen(5));

http://jsfiddle.net/rg7Z3/

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2013-08-06
    • 2011-06-18
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多