首页 > 解决方案 > 在 Ruby 中创建具有至少一个特殊字符、一个数字、一个大写、一个小写且在 Ruby 中没有重复字符的随机字符串

问题描述

我的任务是生成具有以下参数的随机字符串:

  1. 至少一个大写字母
  2. 至少低一个
  3. 至少一位数
  4. 不允许重复的字符/数字(例如,不允许使用 aa,允许使用 aba,允许使用 Aa)

我能够生成带有 1,2,3 参数的随机字符串,但缺少参数 4 逻辑。

inputChars = [('a'..'z'), ('A'..'Z'),(0..9)].map(&:to_a).flatten
string = (0...16).map { inputChars[rand(inputChars.length)] }.join

标签: ruby-on-railsrubystringruby-on-rails-3random

解决方案


require 'set'

inputChars = [('a'..'z'), ('A'..'Z'),(0..9)].map(&:to_a).flatten

set_string = Set.new
loop do
  break if set_string.size == 16

  cr = inputChars[rand(inputChars.length)]
  set_string << cr
end

output = set_string.to_a.join

我只是将您的地图操作更改为循环操作并添加 Set 数据结构以存储来自随机 inputChars 操作的字符。使用 Set 将不允许相同的字符


推荐阅读