Пожалуйста, не делайте этого.
Попросить пользователя использовать некоторые обязательные символы только для того, чтобы его пароль был "надежным", а не легким для запоминания, - очень плохая идея.
Пожалуйста, прочитайте этот комикс XKCD и пересмотрите свой дизайн.
Обновление
Если вам действительно нужно это сделать (возможно, вопрос не имеет ничего общего с паролями), вам следует проверить наличие заглавных букв, используя regex * unicode /\p{Lu}/
или Character.isUpperCase
вместо /[A-Z]/
, так как заглавных букв намного больше, чем на английском языке.
SPECIAL_CHARS = '.,-_' as List // Change this list as needed.
def isValid(str) {
def hasUpperCase = str.find(/\p{Lu}/)
def hasDigit = str.find(/\p{N}/)
def hasSpecialChar = str.any { it in SPECIAL_CHARS }
hasUpperCase && hasDigit && hasSpecialChar
}
assert !isValid('asd')
assert !isValid('Asd')
assert !isValid('Asd1')
assert isValid('Asd1.')
assert !isValid('correct horse battery staple')
assert isValid('Σ.९')