强密码检查
Strong password check
我需要一个正则表达式来检查密码是否:
- 至少 8 个字符
- 包含至少 1 个大写 字母
- 包含至少 1 个小写 字母
- 至少包含 1 个数字 或至少 1 个特殊字符
- 不重复一个字符在行中超过 2 次
应匹配的示例:
- 测试1234!
- Te123stE
不应匹配的示例:
- Teeest123!
- !TESTT1234
这是我目前尝试的方法:
^(?!.*pass|.*Pass|.*qwer|.*Qwer)(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9#?!@$%^&*-]).{8,}$
不知道怎么匹配重复的字符。有什么想法吗?
如果有 3 个或更多 连续 个相同的字符,如果您想使匹配失败,请使用 (?!.*(.){2})
前瞻:
^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9#?!@$%^&*-]*[0-9#?!@$%^&*-])(?!.*[pP]ass|.*[qQ]wer)(?!.*(.){2}).{8,}$
参见regex demo。
如果有 3 个或更多 不一定连续 相同的字符,如果您想使匹配失败,请使用 (?!.*(.).*.*)
前瞻:
^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9#?!@$%^&*-]*[0-9#?!@$%^&*-])(?!.*[pP]ass|.*[qQ]wer)(?!.*(.).*.*).{8,}$
注意 更改:最有效的前瞻移动到开头(就在 ^
之后),效率最低的移动到右边。
增强了检查小写字母、大写字母和 special/digit 字符的最常见前瞻
图案详情
^
- 字符串开头
(?=[^A-Z]*[A-Z])
- 必须至少有一个大写 ASCII 字母[=72=]
(?=[^a-z]*[a-z])
- 必须至少有一个小写 ASCII 字母[=72=]
(?=[^0-9#?!@$%^&*-]*[0-9#?!@$%^&*-])
- 必须至少有一个来自 0-9#?!@$%^&*-
集合的特殊字符(数字或 #
、?
、!
、@
, $
, %
, ^
, &
, *
, -
)
(?!.*[pP]ass|.*[qQ]wer)
- 字符串中不允许 pass
/Pass
和 qwer
/Qwer
(?!.*(.).*.*)
- 不允许三个不一定连续的重复字符
.{8,}
- 除换行符以外的八个或更多字符
$
- 字符串结尾。
您可以使用以下正则表达式:
/
(?=.*[0-9#?!@$%^&*-]) # 1+ digit or special char
(?=.*[A-Z]) # 1+ uc letters
(?=.*[a-z]) # 1+ lc letters
(?=[a-zA-Z0-9#?!@$%^&*-]*$) # all chars valid
(?!.*(.){2}) # no 3+ repeats
.{8,} # match string if length >= 8
/x # free-spacing mode
我需要一个正则表达式来检查密码是否:
- 至少 8 个字符
- 包含至少 1 个大写 字母
- 包含至少 1 个小写 字母
- 至少包含 1 个数字 或至少 1 个特殊字符
- 不重复一个字符在行中超过 2 次
应匹配的示例:
- 测试1234!
- Te123stE
不应匹配的示例:
- Teeest123!
- !TESTT1234
这是我目前尝试的方法:
^(?!.*pass|.*Pass|.*qwer|.*Qwer)(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9#?!@$%^&*-]).{8,}$
不知道怎么匹配重复的字符。有什么想法吗?
如果有 3 个或更多 连续 个相同的字符,如果您想使匹配失败,请使用 (?!.*(.){2})
前瞻:
^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9#?!@$%^&*-]*[0-9#?!@$%^&*-])(?!.*[pP]ass|.*[qQ]wer)(?!.*(.){2}).{8,}$
参见regex demo。
如果有 3 个或更多 不一定连续 相同的字符,如果您想使匹配失败,请使用 (?!.*(.).*.*)
前瞻:
^(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9#?!@$%^&*-]*[0-9#?!@$%^&*-])(?!.*[pP]ass|.*[qQ]wer)(?!.*(.).*.*).{8,}$
注意 更改:最有效的前瞻移动到开头(就在 ^
之后),效率最低的移动到右边。
图案详情
^
- 字符串开头(?=[^A-Z]*[A-Z])
- 必须至少有一个大写 ASCII 字母[=72=](?=[^a-z]*[a-z])
- 必须至少有一个小写 ASCII 字母[=72=](?=[^0-9#?!@$%^&*-]*[0-9#?!@$%^&*-])
- 必须至少有一个来自0-9#?!@$%^&*-
集合的特殊字符(数字或#
、?
、!
、@
,$
,%
,^
,&
,*
,-
)(?!.*[pP]ass|.*[qQ]wer)
- 字符串中不允许pass
/Pass
和qwer
/Qwer
(?!.*(.).*.*)
- 不允许三个不一定连续的重复字符.{8,}
- 除换行符以外的八个或更多字符$
- 字符串结尾。
您可以使用以下正则表达式:
/
(?=.*[0-9#?!@$%^&*-]) # 1+ digit or special char
(?=.*[A-Z]) # 1+ uc letters
(?=.*[a-z]) # 1+ lc letters
(?=[a-zA-Z0-9#?!@$%^&*-]*$) # all chars valid
(?!.*(.){2}) # no 3+ repeats
.{8,} # match string if length >= 8
/x # free-spacing mode