Pav*_*vel 189 javascript random
在JavaScript中生成随机字母数字(大写,小写和数字)字符串以用作可能唯一标识符的最短方式(在合理范围内)是什么?
JAR*_*ans 309
我刚认为这是一个非常好的优雅解决方案:
Math.random().toString(36).slice(2)
Run Code Online (Sandbox Code Playgroud)
关于此实施的说明:
Math.random(),所以输出可以是可预测的,因此不一定是唯一的.Nim*_*ous 263
如果您只想允许特定字符,您也可以这样做:
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');
Run Code Online (Sandbox Code Playgroud)
这里有一个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!'));
Run Code Online (Sandbox Code Playgroud)
小提琴: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);
}
Run Code Online (Sandbox Code Playgroud)
he-*_*aeh 28
JAR.JAR.beans建议的另一种答案变体
(Math.random()*1e32).toString(36)
Run Code Online (Sandbox Code Playgroud)
通过更改乘数,1e32您可以更改随机字符串的长度.
Jos*_* Mc 19
或者基于Jar Jar建议的内容,这是我在最近的项目中使用的(克服长度限制):
var randomString = function (len, bits)
{
bits = bits || 36;
var outStr = "", newStr;
while (outStr.length < len)
{
newStr = Math.random().toString(bits).slice(2);
outStr += newStr.slice(0, Math.min(newStr.length, (len - outStr.length)));
}
return outStr.toUpperCase();
};
Run Code Online (Sandbox Code Playgroud)
使用:
randomString(12, 16); // 12 hexadecimal characters
randomString(200); // 200 alphanumeric characters
Run Code Online (Sandbox Code Playgroud)
Die*_*llo 16
这比较干净
Math.random().toString(36).substr(2, length)
Run Code Online (Sandbox Code Playgroud)
例
Math.random().toString(36).substr(2, 5)
Run Code Online (Sandbox Code Playgroud)
DS.*_*DS. 16
带有lodash的单行,随机20个字符(字母数字小写):
_.times(20, () => _.random(35).toString(36)).join('');
Run Code Online (Sandbox Code Playgroud)
32个字符:
for(var c = ''; c.length < 32;) c += Math.random().toString(36).substr(2, 1)
Run Code Online (Sandbox Code Playgroud)
随机字符:
String.fromCharCode(i); //where is an int
Run Code Online (Sandbox Code Playgroud)
随机int:
Math.floor(Math.random()*100);
Run Code Online (Sandbox Code Playgroud)
把它们放在一起:
function randomNum(hi){
return Math.floor(Math.random()*hi);
}
function randomChar(){
return String.fromCharCode(randomNum(100));
}
function randomString(length){
var str = "";
for(var i = 0; i < length; ++i){
str += randomChar();
}
return str;
}
var RandomString = randomString(32); //32 length string
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/maniator/QZ9J2/
使用 lodash:
function createRandomString(length) {
var chars = "abcdefghijklmnopqrstufwxyzABCDEFGHIJKLMNOPQRSTUFWXYZ1234567890"
var pwd = _.sampleSize(chars, length || 12) // lodash v4: use _.sampleSize
return pwd.join("")
}
document.write(createRandomString(8))Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
随机密钥生成器
keyLength 参数是您想要的密钥字符长度
function keyGen(keyLength) {
var i, key = "", characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var charactersLength = characters.length;
for (i = 0; i < keyLength; i++) {
key += characters.substr(Math.floor((Math.random() * charactersLength) + 1), 1);
}
return key;
}
keyGen(12)
"QEt9mYBiTpYD"
Run Code Online (Sandbox Code Playgroud)
function randomString(len) {
var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return [...Array(len)].reduce(a=>a+p[~~(Math.random()*p.length)],'');
}
Run Code Online (Sandbox Code Playgroud)
摘要:
- 创建一个我们想要的大小的数组(因为
range(len)javascript中没有等价物.- 对于数组中的每个元素:从中选择一个随机字符
p并将其添加到字符串中- 返回生成的字符串.
一些解释:
[...Array(len)]
Array(len)或new Array(len)创建一个带有未定义指针的数组.单行将更难实现.在传播语法方便地定义指针(现在他们指向不确定的对象!).
.reduce(
在这种情况下,将数组减少为单个字符串.reduce函数在大多数语言中都很常见,值得学习.
a=>a+...
我们正在使用箭头功能.
a是累加器.在这种情况下,它是我们在完成时将要返回的结果字符串(您知道它是一个字符串,因为reduce函数的第二个参数,initialValue是一个空字符串:)''.所以基本上:转换数组中的每个元素p[~~(Math.random()*p.length)],将结果附加到a字符串,并a在完成后给我.
p[...]
p是我们正在选择的字符串.您可以像索引一样访问字符串中的字符(例如,"abcdefg"[3]给我们"d")
~~(Math.random()*p.length)
Math.random()返回[0,1之间]的浮点Math.floor(Math.random()*max) 是在javascript中获取随机整数的事实标准.~是javascript中的按位NOT运算符.
~~是一个较短的,可以说有时更快,更有乐趣的方式来说Math.floor( 这里有一些信息
| 归档时间: |
|
| 查看次数: |
211637 次 |
| 最近记录: |