用 ruby​​ 生成一系列特殊字符

Sid*_*Ofc 5 ruby range

我现在对 ruby​​ 很陌生,但我来自 PHP 背景,必须说我喜欢做 ruby​​,很多。这是一种非常好的语言,社区严格但乐于助人。

今天我在看 stackoverflow 并检查了我对一个问题的答案之一,以使用 PHP 生成一个随机字符串。我实际上为此编写了一个脚本,所以我想,为什么不分享它!

此脚本有一些修饰符,允许您选择是否要包含以下集合

  1. 小写字母 az
  2. [1] + 大写 az
  3. [1, 2] + 数字
  4. [1, 2, 3] + 特殊字符
  5. [1, 2, 3, 4] + 一些疯狂的伏都教角色

所以在这个 PHP 脚本中,我将每个集合物理输入到一个数组中,例如:

$charSubSets = array(
    'abcdefghijklmnopqrstuvwxyz',
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
    '0123456789',
    '!@#$%^&*()_+{}|:">?<[]\\\';,.`~',
    'µñ©æáßðøäåé®þüúíóö'
);
Run Code Online (Sandbox Code Playgroud)

这基本上是我能够在那里定义复杂性的方式。

现在看起来不错,即使在代码中,但 ruby​​ 有范围,范围对我来说是新的和闪亮的东西,所以我想在今天晚些时候构建一个随机字符串生成器,只是为了获得更多的经验。

现在对于我的问题,我知道您可以在一个范围内执行以下操作,包括:

  1. 'a'..'z'
  2. 'A'..'Z'
  3. 0..9

等等。但我在想,你也可以用特殊字符制作一个范围吗?比如,只有特殊字符?如果是可能的,你也可以为疯狂voodooh做?

我问的原因是因为文档中没有示例或关于 SO 的任何内容对此进行了解释。

7st*_*tud 6

  1. 查看Range#to_a从 Enumerable 获取的内容。请注意,在文档的左侧,它说 Range 包含 Enumerable,这意味着可以在 Ranges 上调用 Enumerable 中的方法。如果在类中找不到方法,请查看文档所说的包含哪些模块,然后单击包含模块的链接。

  2. 退房Array#shuffle

  3. 查看 Array#join

  4. Check out Array#[],它将以一个范围作为下标,因此您可以获取随机字符数组的一部分。

  5. 两点范围包括结尾。三点范围不包括结尾:

    p (1...5).to_a #=> [1, 2, 3, 4]

把它们放在一起:

chars = (0..9).to_a + ('A'..'z').to_a + ('!'..'?').to_a

10.times do 
  puts chars.shuffle[0..5].join
end

--output:--
I(m,E.
%_;i(3
rb=_ef
kJrA9n
YA`e.K
89qCji
Ba1x3D
acp)=8
2paq3I
U0>Znm
Run Code Online (Sandbox Code Playgroud)

(莎士比亚最终会出现在那里。)

  • `chars.sample(5).join ` (2认同)
  • 你也可以写`chars = [*0..9, *'A'..'z', *'!'..'?']`。第三次我执行 `sizes = Array.new(1 + rand(20)) { 1 + rand(5) }; 尺寸.map { |n| chars.sample(n).join }.join(' ')`,`sizes` 是 `[2,5,2,3,4,2,5,4,3]` 和 `map/join` 返回“如果音乐是爱情的食物,那就继续玩吧。” (2认同)