我目前正在为“A”生成一个8字符伪随机大写字符串。。“Z”:
value = ""; 8.times{value << (65 + rand(25)).chr}
但它看起来不干净,而且不能作为参数传递,因为它不是一个单独的语句。要获取混合大小写字符串“a”。。“z”加“A”。。“Z”,我将其更改为:
value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}
但它看起来像垃圾。
有人有更好的方法吗?
我目前正在为“A”生成一个8字符伪随机大写字符串。。“Z”:
value = ""; 8.times{value << (65 + rand(25)).chr}
但它看起来不干净,而且不能作为参数传递,因为它不是一个单独的语句。要获取混合大小写字符串“a”。。“z”加“A”。。“Z”,我将其更改为:
value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}
但它看起来像垃圾。
有人有更好的方法吗?
当前回答
如果需要,创建空字符串或预修复:
myStr = "OID-"
使用以下代码用随机数填充字符串:
begin; n = ((rand * 43) + 47).ceil; myStr << n.chr if !(58..64).include?(n); end while(myStr.length < 12)
笔记:
(rand * 43) + 47).ceil
它将从48-91(0,1,2..Y,Z)生成随机数
!(58..64).include?(n)
它用于跳过特殊字符(因为我不想包含它们)
while(myStr.length < 12)
它将生成总共12个字符的字符串,包括前缀。
样本输出:
"OID-XZ2J32XM"
其他回答
我使用它生成保证最大长度的随机URL友好字符串:
string_length = 8
rand(36**string_length).to_s(36)
它生成小写a-z和0-9的随机字符串。它不是很可定制的,但它又短又干净。
(0...8).map { (65 + rand(26)).chr }.join
我花了太多时间打高尔夫球。
(0...50).map { ('a'..'z').to_a[rand(26)] }.join
最后一个更令人困惑,但更灵活,浪费更少的周期:
o = [('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
string = (0...50).map { o[rand(o.length)] }.join
如果要生成一些随机文本,请使用以下方法:
50.times.map { (0...(rand(10))).map { ('a'..'z').to_a[rand(26)] }.join }.join(" ")
该代码生成50个单词长度小于10个字符的随机单词串,然后用空格连接
[*('A'..'Z')].sample(8).join
生成随机8个字母的字符串(例如NVAYXHGR)
([*('A'..'Z'),*('0'..'9')]-%w(0 1 I O)).sample(8).join
生成随机的8个字符串(例如3PH4SWF2),不包括0/1/I/O。红宝石1.9
要将您的第一句话变成一句话:
(0...8).collect { |n| value << (65 + rand(25)).chr }.join()
鉴于:
chars = [*('a'..'z'),*('0'..'9')].flatten
可以作为参数传递的单个表达式允许重复字符:
Array.new(len) { chars.sample }.join