我目前正在为“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}
但它看起来像垃圾。
有人有更好的方法吗?
当前回答
以下是长度为8的随机字符串的一行简单代码:
random_string = ('0'..'z').to_a.shuffle.first(8).join
您也可以将其用于长度为8的随机密码:
random_password = ('0'..'z').to_a.shuffle.first(8).join
其他回答
我只是编写了一个小gemrandom_token来为大多数用例生成随机令牌,享受~
https://github.com/sibevin/random_token
以下是长度为8的随机字符串的一行简单代码:
random_string = ('0'..'z').to_a.shuffle.first(8).join
您也可以将其用于长度为8的随机密码:
random_password = ('0'..'z').to_a.shuffle.first(8).join
试试这个
def rand_name(len=9)
ary = [('0'..'9').to_a, ('a'..'z').to_a, ('A'..'Z').to_a]
name = ''
len.times do
name << ary.choice.choice
end
name
end
我喜欢这条线索的答案,真的很有帮助!,但如果我可以说,它们中没有一个满足我的愿望,可能是rand()方法。我觉得这不太对,因为我们已经有了Array#choice方法。
在ruby 1.9中,可以使用Array的choice方法,该方法返回数组中的随机元素
如果您使用的是UNIX,并且仍然必须使用Ruby 1.8(没有SecureRandom)而不使用Rails,那么您也可以使用这个:
random_string = `openssl rand -base64 24`
请注意,这会生成新的shell,这非常慢,只能推荐用于脚本。