如何编写正则表达式以将密码与规则匹配
How to write regex to match password with rules
我正在尝试编写正则表达式以将密码与以下规则匹配
最小长度 - 8 个字符,如果它包含一个数字和一个小写字母或 15 个字符与任意字符组合
这是我的正则表达式
^(?=.*\d[a-z]).{8,}|([a-zA-Z0-9]{15,})$
预期结果:
2232ddds
- 正确
ddds2222
- 正确
实际结果:
2232ddds
- 正确
ddds2222
- 不正确
你能帮我找出问题吗?
问题有两个:
- 锚点只会影响他们旁边的选择
(?=.*\d[a-z])
前瞻只要求一个数字和一个小写字母按此顺序出现,如果先是字母再是数字,则无效。
您可以使用
/^(?:(?=.*\d)(?=.*[a-z]).{8,}|[a-zA-Z0-9]{15,})$/
^^^|-----------------| ^ ^
参见regex demo。
如果您想提高效率并遵循最佳实践,请使用
/^(?:(?=\D*\d)(?=[^a-z]*[a-z]).{8,}|[a-zA-Z0-9]{15,})$/
详情
^
- 字符串开头
(?:
- 非捕获组开始
(?=\D*\d)
- 至少 1 位数
(?=[^a-z]*[a-z])
- 至少 1 个小写字母
.{8,}
- 除换行符以外的任何 8 个或更多字符
|
- 或者
[a-zA-Z0-9]{15,}
- 仅限 15 个或更多字母数字字符
)
- 非捕获组结束
$
- 字符串结尾。
您可以选择以下几个选项来构建您的正则表达式:
字符串至少包含一个:
- 小写
(?=.*[a-z])
- 大写
(?=.*[A-Z])
- 数字
(?=.*\d)
- 符号
(?=.[!@#$%\^&])
字符串的最小字符数:(?=.{8,})
您的正则表达式为:(?=.*[a-z])(?=.*\d)(?=.{8,})|(?=.{15,})
希望对您有所帮助!
我正在尝试编写正则表达式以将密码与以下规则匹配
最小长度 - 8 个字符,如果它包含一个数字和一个小写字母或 15 个字符与任意字符组合
这是我的正则表达式
^(?=.*\d[a-z]).{8,}|([a-zA-Z0-9]{15,})$
预期结果:
2232ddds
- 正确
ddds2222
- 正确
实际结果:
2232ddds
- 正确
ddds2222
- 不正确
你能帮我找出问题吗?
问题有两个:
- 锚点只会影响他们旁边的选择
(?=.*\d[a-z])
前瞻只要求一个数字和一个小写字母按此顺序出现,如果先是字母再是数字,则无效。
您可以使用
/^(?:(?=.*\d)(?=.*[a-z]).{8,}|[a-zA-Z0-9]{15,})$/
^^^|-----------------| ^ ^
参见regex demo。
如果您想提高效率并遵循最佳实践,请使用
/^(?:(?=\D*\d)(?=[^a-z]*[a-z]).{8,}|[a-zA-Z0-9]{15,})$/
详情
^
- 字符串开头(?:
- 非捕获组开始(?=\D*\d)
- 至少 1 位数(?=[^a-z]*[a-z])
- 至少 1 个小写字母.{8,}
- 除换行符以外的任何 8 个或更多字符
|
- 或者[a-zA-Z0-9]{15,}
- 仅限 15 个或更多字母数字字符
)
- 非捕获组结束$
- 字符串结尾。
您可以选择以下几个选项来构建您的正则表达式:
字符串至少包含一个:
- 小写
(?=.*[a-z])
- 大写
(?=.*[A-Z])
- 数字
(?=.*\d)
- 符号
(?=.[!@#$%\^&])
字符串的最小字符数:(?=.{8,})
您的正则表达式为:(?=.*[a-z])(?=.*\d)(?=.{8,})|(?=.{15,})
希望对您有所帮助!