在JavaScript中生成一个随机的字母数字(大写,小写和数字)字符串来用作可能唯一的标识符的最短方法是什么?
当前回答
beans建议的另一种答案变体
(Math.random()*1e32).toString(36)
通过改变乘数1e32,你可以改变随机字符串的长度。
其他回答
一个取长度的简单函数
getRandomToken(len: number): string {
return Math.random().toString(36).substr(2, len);
}
如果你传递6,它会生成6位字母数字
beans建议的另一种答案变体
(Math.random()*1e32).toString(36)
通过改变乘数1e32,你可以改变随机字符串的长度。
很好,很简单,而且不局限于一定数量的字符:
let len = 20, str = "";
while(str.length < len) str += Math.random().toString(36).substr(2);
str = str.substr(0, len);
这是一个简单的代码来生成随机字符串字母。 看看这段代码是如何工作的。 去(lenthOfStringToPrint);-使用此函数生成最终字符串。
var letters = {
1: ["q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m"],
2: ["Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"]
},i,letter,final="";
random = (max,min) => {
return Math.floor(Math.random()*(max-min+1)+min);
}
function go(length) {
final="",letter="";
for (i=1; i<=length; i++){
letter = letters[random(0,3)][random(0,25)];
final+=letter;
}
return final;
}
这个函数应该给出任意长度的随机字符串。
function randString(length) {
var l = length > 25 ? 25 : length;
var str = Math.random().toString(36).substr(2, l);
if(str.length >= length){
return str;
}
return str.concat(this.randString(length - str.length));
}
我用下面的测试成功地测试了它。
function test(){
for(var x = 0; x < 300000; x++){
if(randString(x).length != x){
throw new Error('invalid result for len ' + x);
}
}
}
我选择25的原因是,在实践中,从Math.random(). tostring(36)返回的字符串长度。Substr(2,25)的长度为25。这个数字可以根据您的意愿更改。
此函数是递归的,因此使用非常大的值调用函数可能会导致超过最大调用堆栈大小。从我的测试中,我能够得到长度为30万字符的字符串。
通过将字符串作为第二个参数发送给函数,可以将该函数转换为尾递归。我不确定JS是否使用Tail调用优化