我想要一个5个字符的字符串,由从集合[a-zA-Z0-9]中随机选取的字符组成。
用JavaScript实现这一点的最佳方法是什么?
我想要一个5个字符的字符串,由从集合[a-zA-Z0-9]中随机选取的字符组成。
用JavaScript实现这一点的最佳方法是什么?
当前回答
//返回随机字母
let alpha = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
console.log(alpha.charAt(Math.floor(Math.random() * alpha.length)));
其他回答
带有es6排列运算符的更新版本:
[…数组(30)].map(()=>Math.random().toString(36)[2]).join(“”)
30是一个任意数字,您可以选择所需的任何令牌长度36是可以传递给numeric.toString()的最大基数,表示所有数字和a-z小写字母2用于从如下所示的随机字符串中选择第三个索引:“0.mfbiohx64i”,我们可以取0之后的任何索引。
这一个结合了许多给出的答案。
var randNo=Math.floor(Math.random()*100)+2+“”+new Date().getTime()+Math.floof(Math.rrandom()*100)+2+(Math.rand().toString(36).replace(/[^a-zA-Z]+/g,'').substr(0,5));console.log(randNo);
我用了一个月,效果很好。
如果只需要大写字母(A-Z):
randomAZ(n: number): string {
return Array(n)
.fill(null)
.map(() => Math.random()*100%25 + 'A'.charCodeAt(0))
.map(a => String.fromCharCode(a))
.join('')
}
如果您只希望第一个字母大写(A-Z),其余字母小写(A-Z):
function RandomWord(n: number): string {
return Array(n)
.fill(null)
.map(() => Math.random()*100%25 + 'A'.charCodeAt(0))
.map((a, i) => i === 0? String.fromCharCode(a) : String.fromCharCode(a+32))
.join('')
}
一个衬垫[a-z]:
String.fromCharCode(97 + Math.floor(Math.random() * 26))
教人钓鱼:
程序员用激光切割纸张,而不是电锯。使用边缘的、特定于语言的方法来生成最小、最模糊的代码是非常可爱的,但永远不会提供完整的解决方案。你必须使用合适的工具来完成这项工作。
您需要的是字符串,字符由字节表示。而且,我们可以用数字在JavaScript中表示一个字节。因此,我们应该生成这些数字的列表,并将它们转换为字符串。你不需要Date或base64;Math.random()将获得一个数字,String.fromCharCode()将其转换为字符串。容易的
但是,哪个数字等于哪个字符?UTF-8是web上用于将字节解释为字符的主要标准(尽管JavaScript内部使用UTF-16,但它们是重叠的)。程序员解决这个问题的方法是查看文档。
UTF-8以0到128之间的数字列出键盘上的所有键。有些是非打印的。只需在随机字符串中选择所需的字符,然后使用随机生成的数字搜索它们。
Bellow是一个几乎无限长的函数,在循环中生成一个随机数,并搜索低128位UTF-8代码中的所有打印字符。熵是固有的,因为并非所有随机数每次都会命中(非打印字符、空格等)。当您添加更多字符时,它的执行速度也会更快。
我已经包含了线程中讨论的大多数优化:
双颚化符比Math.floor快“if”语句比正则表达式更快推送到数组比字符串串联更快
函数randomID(len){var字符;var arr=[];var len=长度||5;做{char=~~(Math.random()*128);如果(((字符>47和字符<58)| |//0-9(字符>64和字符<91)||//A-Z(字符>96和字符<123)//a-z//||(字符>32&&字符<48)//!"#$%&,()*+'-.///|(字符>59&&字符<65)//<=>@//|(字符>90&&字符<97)//[\]^_`//|(字符>123&&字符<127)//{|}~)//安全意识删除:“'\`//&&(char!=34&&char!=39&&char!=92&&char!=96)){arr.push(String.fromCharCode(char))}}而(arr.length<len);return arr.join(“”)}var input=document.getElementById('length');input.onfocus=函数(){input.value=“”;}document.getElementById('button').onclick=函数(){var view=document.getElementById(“字符串”);var is_number=str=>!编号.isNaN(parseInt(str));if(is_number(input.value))view.innerText=随机ID(input.value);其他的view.innerText='输入数字';}#长度,长度{宽度:3em;颜色:#484848;}#字符串{颜色:#E83838;字体系列:'sans-serif';换行:换行;}<input id=“length”type=“text”value=“#”/><input id=“button”type=“button“value=“Generate”/><p id=“string”></p>
为什么要用这种乏味的方式?因为你可以。你是个程序员。你可以让电脑做任何事情!此外,如果你想要一串希伯来语字符呢?这并不难。在UTF-8标准中查找这些字符并搜索它们。将自己从这些McDonald方法中解放出来,比如toString(36)。
有时,创建真正的解决方案需要降低抽象级别。了解手头的基本原理可以让您按照自己的意愿定制代码。也许你想要一个无限生成的字符串来填充一个循环缓冲区?也许你希望所有生成的字符串都是回文?为什么要克制自己?