如果字符串在groovy中包含至少1个大写字符,1个数字字符和1个特殊字符,如何编写返回true
的函数?
提前致谢
答案 0 :(得分:5)
要求用户使用一些强制性字符只是为了让他的密码“强”,而不是容易记住,这是一个非常糟糕的主意。
请阅读this XKCD comic并重新考虑您的设计。
如果确实需要这样做(可能问题与密码无关),您应该使用unicode regex /\p{Lu}/
或{{来检查大写字母3}}而不是/[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 :(得分:1)
您可以使用find
独立测试您要求的声明组件
def isValid (pwd) {
return pwd.find(/[A-Z]/) && pwd.find(/\d/) && pwd.find(/[@#$%^&+=]/)
// or insert your 'special characters' here ^
}