2012-09-20 157 views
1

在控制器中,我如何验证密码,使其至少包含1个字母,1个数字,1个特殊字符,并且至少包含8位数字。我想使用的代码如下:Grails验证密码

boolean validatePassword(String password) { 
    System.out.println("In validate") 
    def pattern = /^.*(?=.{7,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[[email protected]#$%*&+()]).*$/ 
    def matcher = password =~ pattern 
    System.out.println("HERERERE") 
    return matcher.getCount() ? true : false 
} 

如果说一切都是无效的这不起作用。 我安装了spring security ui插件。有没有一种方法可以使用它的验证功能? 我知道我可以用它来编码密码。

回答

2

与其试图在一个正则表达式中做所有事情,我会分解测试。由于在Groovy中Matcher通过调用find()来强制布尔值,所以下面的内容应该可以工作,并且使意图更清楚。

boolean validatePassword(String pass) { 
    return (pass) && (pass.length() > 7) && (pass =~ /\p{Alpha}/) && 
     (pass =~ /\p{Digit}/) && (pass =~ /[[email protected]#$%*&+()]/) 
}