我正在使用以下正则表达式
'^(?!.*(.)\\{4})(?=.*[0-9 \\Q~!@#$%^&*()-_=+[]{}|;:,.<>/?]{2,})(?=.*[a-zA-Z]{2,}){8,50}$'
条件:
- 密码必须包含至少 8 个字符且不超过 50 个字符。
- 密码必须至少包含 2 个字母。
- 密码不能包含超过 4 个相同字符。
- 密码必须包含至少 5 个唯一字符。
- 密码必须包含至少 2 个唯一数字(符号算作数字)。
当我尝试使用 Grails 运行应用程序时,它会抛出未封闭的字符类异常。我也对必须检查 5 个唯一字符条件的部分表示怀疑。帮我解决这个问题。
提前致谢。
最佳答案
不确定grails是否对此有任何特殊处理,但在java中,大概grails委托(delegate)你需要转义特殊字符,未封闭的字符类几乎可以肯定是由+和{}之间的[]引起的。
您最好使用一些字符类\p{punct} 来避免这些问题。
话虽如此,这在代码中会更容易、更清晰。定义各种字符集并在迭代密码时检查成员身份。这样做的另一个好处是您可以显式避免 SQL 注入(inject)的麻烦。
关于java - 在 Grails 中使用正则表达式进行密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9729192/