在JavaScript中生成随机字母数字(大写、小写和数字)字符串用作可能唯一的标识符的最短方法(在合理范围内)是什么?
发布于 2012-05-24 04:13:58
如果你只想允许特定的字符,你也可以这样做:
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
这是一个要演示的jsfiddle:http://jsfiddle.net/wSQBx/
另一种方法是使用一个特殊的字符串来告诉函数要使用什么类型的字符。你可以这样做:
function randomString(length, chars) {
var mask = '';
if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (chars.indexOf('#') > -1) mask += '0123456789';
if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
var result = '';
for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
return result;
}
console.log(randomString(16, 'aA'));
console.log(randomString(32, '#aA'));
console.log(randomString(64, '#A!'));
小提琴:http://jsfiddle.net/wSQBx/2/
或者,要使用如下所述的base36方法,您可以执行如下操作:
function randomString(length) {
return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1);
}
发布于 2015-06-19 04:49:19
JAR.JAR.beans建议的另一种答案变体
(Math.random()*1e32).toString(36)
通过更改乘法器1e32
,您可以更改随机字符串的长度。
发布于 2017-06-19 12:33:11
更新:一行解决方案,随机20个字符(字母数字小写):
Array.from(Array(20), () => Math.floor(Math.random() * 36).toString(36)).join('');
或者用lodash缩短:
_.times(20, () => _.random(35).toString(36)).join('');
https://stackoverflow.com/questions/10726909
复制相似问题