我目前正在为“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}
但它看起来像垃圾。
有人有更好的方法吗?
当前回答
另一个适用于Ruby 1.8+且速度快的技巧是:
>> require "openssl"
>> OpenSSL::Random.random_bytes(20).unpack('H*').join
=> "2f3ff53dd712ba2303a573d9f9a8c1dbc1942d28"
它得到的是随机十六进制字符串。类似的方式,您应该能够生成base64字符串('M*')。
其他回答
(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个字符的随机单词串,然后用空格连接
在这里加上我的美分。。。
def random_string(length = 8)
rand(32**length).to_s(32)
end
这几乎是丑陋的,但也许是朝着正确的方向迈出的一步?
(1..8).map{|i| ('a'..'z').to_a[rand(26)]}.join
我只是编写了一个小gemrandom_token来为大多数用例生成随机令牌,享受~
https://github.com/sibevin/random_token
我想,到目前为止,我最喜欢雷达的回答。我会这样做:
CHARS = ('a'..'z').to_a + ('A'..'Z').to_a
def rand_string(length=8)
s=''
length.times{ s << CHARS[rand(CHARS.length)] }
s
end