groovy方法检查密码字段是否包含至少1个大写字符,1个数字字符和1个特殊字符

时间:2012-04-03 00:37:21

标签: groovy

如果字符串在groovy中包含至少1个大写字符,1个数字字符和1个特殊字符,如何编写返回true的函数?

提前致谢

2 个答案:

答案 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 ^
}