Это можно сделать с помощью регулярного выражения, содержащего три положительных указателя :
r = /(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/
"abcDE27f".match?(r) #=> true
"abcde27f".match?(r) #=> false
"ABCDE27F".match?(r) #=> false
"abcDEfgh".match?(r) #=> false
Вы можете добавить другие требования с помощью дополнительных положительных указателей. Например, если длина строки должна быть от 8 до 10 символов, вы можете добавить
(?=.{8,10}\z)
Если вы хотите, чтобы строка содержала только буквы алфавита c, добавьте
(?=\p{Alnum}+\z)
или поставьте \A\p{Alnum}+\z
в конце регулярного выражения.