gpt4 book ai didi

java - 正则表达式验证仅在固定长度之间接受的密码

转载 作者:行者123 更新时间:2023-11-30 07:52:25 26 4
gpt4 key购买 nike

我有正则表达式来验证密码,它只接受 10 到 16 之间的密码。

但是,即使我输入超过 16 个字符,它也会返回 true

我的正则表达式是:

^(?=.{10,16})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).*$

最佳答案

使用 (?=.{10,16}) 前瞻,您设置最小长度,10,16 是不重要,因为你没有在末尾添加 $ 告诉匹配 16 个字符后停止匹配。

您可以在 {10,16} 之后添加 $,或者移除 lookahead 并在最终结果之前添加 {10,16} $

我建议遵循以下规则:先行次数必须是条件数减 1(请参阅 rexegg.com for reference ):

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).{10,16}$
^^^^ ^^^^^^^^

See the regex demo .

详情

  • ^ - 字符串的开始
  • (?=.*[0-9]) - 至少一位数
  • (?=.*[a-z]) - 至少一个小写 ASCII 字母
  • (?=.*[A-Z]) - 至少一个大写 ASCII 字母
  • (?=.*[!@#$%^&+=]) - 集合中定义的至少一个特殊字符
  • .{10,16} - 任何 10 到 16 个字符
  • $ - 字符串结尾。

在 Java 中,如果您在 .matches() 方法中使用模式,则不需要前导 ^ 和尾随 $它需要一个完整的字符串匹配。

Java:

if (s.matches("(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=]).{10,16}")) {
return true;
}

关于java - 正则表达式验证仅在固定长度之间接受的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45953094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com