如何在Ruby中生成一个随机字符串

我目前正在为“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}

但它看起来像垃圾。

有没有人有更好的方法?


(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

为什么不使用SecureRandom?

require 'securerandom'
random_string = SecureRandom.hex

# outputs: 5b5cd0da3121fc53b4bc84d0c8af2e81 (i.e. 32 chars of 0..9, a..f)

SecureRandom还具有以下方法:

  • BASE64
  • random_bytes
  • RANDOM_NUMBER
  • 请参阅:http://ruby-doc.org/stdlib-1.9.2/libdoc/securerandom/rdoc/SecureRandom.html


    我使用它来产生具有保证最大长度的随机URL友好字符串:

    rand(36**length).to_s(36)
    

    它会生成小写az和0-9的随机字符串。 它不是非常可定制的,但它很短而且干净。

    链接地址: http://www.djcxy.com/p/20589.html

    上一篇: How to generate a random string in Ruby

    下一篇: How to comment and uncomment blocks of code in the Office VBA Editor