首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正则表达式用于验证密码强度

正则表达式用于验证密码强度
EN

Stack Overflow用户
提问于 2011-02-28 20:39:48
回答 11查看 132.4K关注 0票数 162

我的密码强度标准如下:

  • 8 characters length
  • 2字母大写
  • 1特殊字符数字小写字母

谁能给我一个相同的正则表达式。密码必须满足所有条件。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-02-28 20:46:43

您可以使用肯定的先行断言来执行这些检查:

代码语言:javascript
复制
^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$

Rubular link

解释:

代码语言:javascript
复制
^                         Start anchor
(?=.*[A-Z].*[A-Z])        Ensure string has two uppercase letters.
(?=.*[!@#$&*])            Ensure string has one special case letter.
(?=.*[0-9].*[0-9])        Ensure string has two digits.
(?=.*[a-z].*[a-z].*[a-z]) Ensure string has three lowercase letters.
.{8}                      Ensure string is of length 8.
$                         End anchor.
票数 502
EN

Stack Overflow用户

发布于 2019-12-13 15:06:05

您还应考虑将某些规则更改为:

  1. 添加更多特殊字符,如%、^、(,)、-、_、+和句点。我会在美国键盘的数字符号上方添加你遗漏的所有特殊字符。转义正则表达式使用的密码。
  2. 将密码设置为8个或更多字符。不只是一个静态数字8。

通过上述改进,为了获得更大的灵活性和可读性,我将regex修改为。

代码语言:javascript
复制
^(?=(.*[a-z]){3,})(?=(.*[A-Z]){2,})(?=(.*[0-9]){2,})(?=(.*[!@#$%^&*()\-__+.]){1,}).{8,}$

基本解释

代码语言:javascript
复制
(?=(.*RULE){MIN_OCCURANCES,})     

每个规则块由(?=(){})显示。然后,在组合之前,可以轻松地分别指定和测试规则和出现次数

详细说明

代码语言:javascript
复制
^                               start anchor
(?=(.*[a-z]){3,})               lowercase letters. {3,} indicates that you want 3 of this group
(?=(.*[A-Z]){2,})               uppercase letters. {2,} indicates that you want 2 of this group
(?=(.*[0-9]){2,})               numbers. {2,} indicates that you want 2 of this group
(?=(.*[!@#$%^&*()\-__+.]){1,})  all the special characters in the [] fields. The ones used by regex are escaped by using the \ or the character itself. {1,} is redundant, but good practice, in case you change that to more than 1 in the future. Also keeps all the groups consistent
{8,}                            indicates that you want 8 or more
$                               end anchor

最后,出于测试目的,这里是一个带有上述正则表达式的robulink

票数 13
EN

Stack Overflow用户

发布于 2011-02-28 20:48:52

您可以使用长度为零的正向look-ahead分别指定每个约束:

代码语言:javascript
复制
(?=.{8,})(?=.*\p{Lu}.*\p{Lu})(?=.*[!@#$&*])(?=.*[0-9])(?=.*\p{Ll}.*\p{Ll})

如果您的正则表达式引擎不支持\p表示法,并且纯ASCII码就足够了,那么可以将\p{Lu}替换为[A-Z],将\p{Ll}替换为[a-z]

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5142103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档