java - 在 Grails 中使用正则表达式进行密码验证

标签 java regex grails

我正在使用以下正则表达式

'^(?!.*(.)\\{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/

相关文章:

java - 什么是NullPointerException,我该如何解决?

javascript - 奇怪的 JavaScript 习语 - "/xyz/.test(function(){xyz;})"是做什么的?

javascript - 使用正则表达式替换删除 bb 代码

grails:将 grails 域类作为函数参数传递

java - 我已经创建了一个带有 TextView 和 ImageView 的 Place 对象,但是当我尝试添加一个 place 对象时收到此错误

Java Calendar.getTimeInMillis

css - 在 SpringSource Tool Suite 中,我可以在哪里编辑主题?

version-control - 哪些 grails 项目文件不应添加到版本控制中? (Grails 1.3.x)

java - 升级到 Spring Boot 2.4 破坏 Spock Spring 模拟

javascript - 如何有效地替换字符串中可能重复的字符