我打算编写一个正则表达式,仅当字符串至少包含 n 个不同类别的字符时才匹配。我打算用它来强制我的用户创建强密码,并想检查密码是否至少包含以下 3 项:
- 人物
- 大写字符
- 数字
- 特殊字符
如果所有这些类都存在,编写一个匹配的正则表达式是微不足道的使用前瞻。但是,我无法理解“至少 3”部分。这甚至可能(在一个漂亮、紧凑的表达式中)还是我必须创建一个怪物表达式?
最佳答案
我认为这将比列出 4 个中的 3 个的每个可能组合更紧凑。它利用否定前瞻来确保整个字符串不只由您列出的一个或两个字符类组成:
(?!([a-zA-Z]*|[a-z\d]*|[^A-Z\d]*|[A-Z\d]*|[^a-z\d]*|[^a-zA-Z]*)$).*
按顺序,这里的组是:
- 较低和/或较高
- 小数位和/或小数位
- 较低的和/或特殊的
- 大写和/或数字
- 高级和/或特殊
- 数字和/或特殊
如果整个字符串(因为否定先行中的 $
)仅包含上述任何组中的字符,则此正则表达式将失败。
关于javascript - 至少匹配 m 组中的 n 组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739676/