【发布时间】:2016-02-14 23:19:10
【问题描述】:
我现在对 ruby 很陌生,但我来自 PHP 背景,必须说我喜欢做 ruby,很多。这是一门非常好的语言,社区很严格但很有帮助。
今天我正在查看stackoverflow,并检查了我的answers 之一以使用PHP 生成随机字符串。我实际上为此编写了一个脚本,所以我想,为什么不分享它!
此脚本有一些修饰符,可让您选择是否要包含以下集合
- 小写 a-z
- [1] + 大写 a-z
- [1, 2] + 数字
- [1, 2, 3] + 特殊字符
- [1, 2, 3, 4] + 一些疯狂的巫毒角色
所以在这个 PHP 脚本中,我将每个集合物理地输入到一个数组中,例如:
$charSubSets = array(
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'0123456789',
'!@#$%^&*()_+{}|:">?<[]\\\';,.`~',
'µñ©æáßðøäåé®þüúíóö'
);
这基本上是我能够在此处定义复杂性的方式。
现在看起来没问题,即使在代码中,但 ruby 有 ranges 并且范围对我来说是新的和闪亮的东西,所以我想在今天晚些时候构建一个随机字符串生成器,只是为了获得更多的经验.
现在我的问题是,我知道您可以在以下范围内执行以下操作:
'a'..'z''A'..'Z'0..9
等等。但我在想,你能不能也用特殊字符来做一个范围?如,只有个特殊字符?如果那个是可能的,你是否也能为疯狂的巫毒做同样的事情?
我问的原因是因为docs 中没有任何例子或任何关于 SO 的解释。
【问题讨论】:
-
你能不能也用特殊字符做一个范围?例如,只有特殊字符? 对于字符范围,ruby 会查看范围开头和结尾的 ascii 代码。对于 Sidney 的答案中的范围
'!'..'?',范围的开头!的 ascii 代码为 31,范围的结尾?的 ascii 代码为 63,因此所有带有start 和 end 之间的 ascii 代码将包含在该范围内。看一个ascii图表。范围也适用于非 ASCII 字符。在这种情况下,请查看 unicode 图表,例如("\u01f1".."\u01fa").to_a -
@7stud 太棒了,我回答了这个问题问答风格,因为我自己尝试了一下,在互联网上没有看到明确的例子,所以我尝试在这里创建一个! Ruby 和 PHP 在便利性方面也大不相同。
-
我以问答方式回答了这个问题。哈!我没注意到。