Groovy метод, чтобы проверить, содержит ли поле пароля хотя бы 1 заглавный символ, 1 числовой символ и 1 специальный символ - PullRequest
0 голосов
/ 03 апреля 2012

Как мне написать функцию, которая возвращает true, если строка содержит хотя бы 1 заглавный, 1 числовой и 1 специальный символ в groovy?

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Пожалуйста, не делайте этого.

Попросить пользователя использовать некоторые обязательные символы только для того, чтобы его пароль был "надежным", а не легким для запоминания, - очень плохая идея.

Пожалуйста, прочитайте этот комикс 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('Σ.९')
1 голос
/ 03 апреля 2012

Вы можете использовать find для независимой проверки указанных компонентов вашего требования

def isValid (pwd) {
    return pwd.find(/[A-Z]/) && pwd.find(/\d/) && pwd.find(/[@#$%^&+=]/)
    //              or insert your 'special characters' here ^
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...