使用某些必需条件(大写字母,数字,特殊字符)生成固定长度的密码字符串

Car*_*ela 2 ruby

我正在尝试生成一定长度的安全密码,以满足特定条件.

例如,我想要(比方说)10个字母的密码:

至少有1封大写字母

至少有1个小写字母

至少有1个号码

至少有1个下划线(或其他字符,但下划线是好的,因为某些限制只接受下划线)

我试过了

SecureRandom.url_safeBase64(10)
Run Code Online (Sandbox Code Playgroud)

但这会产生太长的字符串,并不能保证每个限制都存在.

想知道是否有一个简单的方法......

FMc*_*FMc 5

low = ('a'..'d').to_a
up  = ('A'..'Z').to_a
num = ('0'..'9').to_a
u   = ['_']
any = low + up + num + u
pw  = (low.sample(1) + 
       up.sample(1) + 
       num.sample(1) + 
       u.sample(1) +
       any.sample(6)).shuffle.join
Run Code Online (Sandbox Code Playgroud)