java - 正则表达式密码至少一个字符来自三个 3 类别
问题描述
我需要一个正则表达式来检查: 包含以下三 (4) 个类别中的至少一 (1) 个字符:
- 大写字母 (AZ)
- 小写字母 (az)
- 数字 (0-9)
- 特殊字符(~`!@#$%^&*()+=_-{}[]\|:;”'?/<>,.)
不是必须来自所有 4 个类别,至少可以来自 3 个类别
解决方案
如果满足任何三个条件,您想要四个条件,那么它应该接受密码,您需要提前查看所有不同的排列/组合。你可以使用这个正则表达式,
^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[\d~`!@#$%^&*()+=_{}\[\]\|:;”’?\/<>,.-])|(?=.*[a-z])(?=.*\d)(?=.*[A-Z~`!@#$%^&*()+=_{}\[\]\|:;”’?\/<>,.-])|(?=.*[a-z])(?=.*[~`!@#$%^&*()+=_{}\[\]\|:;”’?\/<>,.-])(?=.*[A-Z\d])|(?=.*[A-Z])(?=.*\d)(?=.*[a-z~`!@#$%^&*()+=_{}\[\]\|:;”’?\/<>,.-])|(?=.*[A-Z])(?=.*[~`!@#$%^&*()+=_{}\[\]\|:;”’?\/<>,.-])(?=.*[a-z\d])|(?=.*\d)(?=.*[~`!@#$%^&*()+=_{}\[\]\|:;”’?\/<>,.-])(?=.*[a-zA-Z])).*$
如您所见,正则表达式变得太大而无法解释,让我简要介绍一下此处应用的概念。
由于有四个字符集,其中如果密码包含任何三个字符中的至少一个,则您接受,因此您需要提前检查两个字符集,然后第三个字符集可以与剩下两个来检查是否至少一个字符来自剩余的一个。并将此逻辑与所有此类排列一起应用并交替所有情况。让我换一个例子来给你解释一下。像这样,
(?=.*[a-z])(?=.*[A-Z])(?=.*[\d~`!@#$%^&*()+=_{}\[\]\:;”’?\/<>,.-])
在这里它检查密码是否包含小写,大写,然后在剩余的集合中是数字和特殊字符可以组合,因为我们只需要在数字或特殊字符集中匹配任何一个字符。
相同的逻辑可以应用不同的字符集组成,并交替组合以匹配任何组合,从而为您提供密码的有效性。
我已经采取了各种示例来说明如果密码仅属于两个字符集,则密码将不匹配,并且仅在包含剩余字符集中的一个字符时才会开始匹配。
希望这可以帮助。如果您有任何疑问,请告诉我。
推荐阅读
- php - phpoffice 或任何可以向 word 文档添加注释的 phpWord 库?
- arrays - 如何在令牌之间检索值
- python - 时钟和计数器在同一个窗口
- java - 为什么需要 tmsmapper.ClassPathMapperScanner 和 omsmapper.ClassPathMapperScanner
- node.js - 连接丢失后 NestJS 重新连接到数据库
- java - swing 的样式错误:方法创建了一个对象,但没有分配变量或字段
- python - 二叉搜索树 - 在 Python 中搜索 Fcn
- r - Power BI 中 R 视觉对象的第一步
- jquery - $(...).niceSelect 与 Jquery 不是函数
- excel - 如何将类别列旋转到每个类别的各个列