我现在对 ruby 很陌生,但我来自 PHP 背景,必须说我喜欢做 ruby,很多。这是一种非常好的语言,社区严格但乐于助人。
今天我在看 stackoverflow 并检查了我对一个问题的答案之一,以使用 PHP 生成一个随机字符串。我实际上为此编写了一个脚本,所以我想,为什么不分享它!
此脚本有一些修饰符,允许您选择是否要包含以下集合
所以在这个 PHP 脚本中,我将每个集合物理输入到一个数组中,例如:
$charSubSets = array(
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'0123456789',
'!@#$%^&*()_+{}|:">?<[]\\\';,.`~',
'µñ©æáßðøäåé®þüúíóö'
);
Run Code Online (Sandbox Code Playgroud)
这基本上是我能够在那里定义复杂性的方式。
现在看起来不错,即使在代码中,但 ruby 有范围,范围对我来说是新的和闪亮的东西,所以我想在今天晚些时候构建一个随机字符串生成器,只是为了获得更多的经验。
现在对于我的问题,我知道您可以在一个范围内执行以下操作,包括:
'a'..'z''A'..'Z'0..9等等。但我在想,你也可以用特殊字符制作一个范围吗?比如,只有特殊字符?如果这是可能的,你也可以为疯狂voodooh做?
我问的原因是因为文档中没有示例或关于 SO 的任何内容对此进行了解释。
查看Range#to_a从 Enumerable 获取的内容。请注意,在文档的左侧,它说 Range 包含 Enumerable,这意味着可以在 Ranges 上调用 Enumerable 中的方法。如果在类中找不到方法,请查看文档所说的包含哪些模块,然后单击包含模块的链接。
退房Array#shuffle。
查看 Array#join
Check out Array#[],它将以一个范围作为下标,因此您可以获取随机字符数组的一部分。
两点范围包括结尾。三点范围不包括结尾:
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)
(莎士比亚最终会出现在那里。)