我想要一个5个字符的字符串,由从集合[a-zA-Z0-9]中随机选取的字符组成。

用JavaScript实现这一点的最佳方法是什么?


当前回答

这里有一些简单的一行。更改新阵列(5)以设置长度。

包括0-9a-z

new Array(5).join().replace(/(.|$)/g, function(){return ((Math.random()*36)|0).toString(36);})

包括0-9a-zA-Z

new Array(5).join().replace(/(.|$)/g, function(){return ((Math.random()*36)|0).toString(36)[Math.random()<.5?"toString":"toUpperCase"]();});

ES6编码(0-9a-z)

Array(5).fill().map(n=>(Math.random()*36|0).toString(36)).join('')

其他回答

这将在变量c中存储5个字母数字字符。

for(var c = ''; c.length < 5;) c += Math.random().toString(36).substr(2, 1)

下面这个怎么样。。。这将产生真正随机的值:

function getRandomStrings(length) {
  const value = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  const randoms = [];
  for(let i=0; i < length; i++) {
     randoms.push(value[Math.floor(Math.random()*value.length)]);
  }
  return randoms.join('');
}

但如果您在ES6中寻找一个较短的语法:

const getRandomStrings = length => Math.random().toString(36).substr(-length);

这是肯定的

<script language="javascript" type="text/javascript">
function randomString() {
 var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
 var string_length = 8;
 var randomstring = '';
 for (var i=0; i<string_length; i++) {
  var rnum = Math.floor(Math.random() * chars.length);
  randomstring += chars.substring(rnum,rnum+1);
 }
 document.randform.randomfield.value = randomstring;
}
</script>

为了从一个数组中生成一个散列作为一个盐,[0,1,2,3]在这个例子中,通过这种方式,我们可以稍后检索散列来填充一个条件。

只需输入一个随机数组,或作为数组的额外安全和快速指纹。

/*该方法非常快速,适用于密集循环*//*返回大小写混合字符*//*这将始终输出相同的哈希,因为salt数组是相同的*/控制台日志(btoa(String.fromCharCode(…新Uint8Array([0,1,2,3])))/*始终输出此处的随机十六进制哈希:30个字符*/控制台日志(btoa(String.fromCharCode(…new Uint8Array(Array(30).fill().map(()=>Math.round(Math.random()*30)))))

使用加密API中的HMAC,了解更多信息:https://stackoverflow.com/a/56416039/2494754

我使用var randId='rand'+new Date().getTime();