gpt4 book ai didi

regex - 使用正则表达式验证密码

转载 作者:行者123 更新时间:2023-12-01 03:36:51 27 4
gpt4 key购买 nike

以下是用于验证我的密码的正则表达式:

(((?=.*\\d{2,20})(?=.*[a-z]{2,20})(?=.*[A-Z]{3,20})(?=.*[@#$%!@@%&*?_~,-]{2,20})).{9,20}[^<>'\"])


基本上我想要的是它包含密码中的所有上述给定字符。但是它需要按顺序排列这些字符,例如
它验证 23aaAAA@!,但不验证 a2@!AAAa

最佳答案

只需添加嵌套的捕获组,就可以不严格按照顺序进行字符验证。正则表达式也可以简化为以下形式(没有额外的组):

(?=(?:.*[0-9]){2,20})
(?=(?:.*[a-z]){2,20})
(?=(?:.*[A-Z]){3,20})
(?=(?:.*[@#$%!&*?_~,-]){2,20})
.{9,20}
[^<>'\"] # This matches also the newline char, i don't think you really want this...


在Java中,按如下方式使用它来匹配:

String regex = "(?=(?:.*[0-9]){2,20})(?=(?:.*[a-z]){2,20})(?=(?:.*[A-Z]){3,20})(?=(?:.*[@#$%!&*?_~,-]){2,20}).{9,20}[^<>'\"]";
String password = "23aaA@AA!@X"; // This have to be 10 chars long at least, no newline

if (password.matches(regex))
System.out.println("Success");
else
System.out.println("Failure");


正则表达式要求输入以下密码(并非严格按顺序排列):


(?=(?:.*[0-9]){2,20}):2个数字
(?=(?:.*[a-z]){2,20}):3个小写字母
(?=(?:.*[A-Z]){3,20}):3个大写字母
(?=(?:.*[@#$%!&*?_~,-]){2,20}):chars组中的两个符号
.{9,20}:最小长度为9,最大长度为20
[^<>'\"]:不在( <>'")中的一个字符(注意:这也与换行符匹配)


因此 min / max实际上是 10 / 21,但是最后一个语句也与换行符匹配,因此在在线正则表达式演示中,可见字符将位于 920之间。

正则表达式在线演示 here

关于regex - 使用正则表达式验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935105/

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