我需要一个正则表达式来检查:

密码至少包含八个字符,包括至少一个数字,包括小写和大写字母以及特殊字符,例如#、?、!。

它不能是您的旧密码,也不能包含您的用户名、“密码”或“网站名称”

这是我的验证表达式,用于八个字符,包括一个大写字母、一个小写字母和一个数字或特殊字符。

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

如果密码必须是八个字符,包括一个大写字母、一个特殊字符和字母数字字符,我怎么写?


当前回答

 

✅ 以下4个正则表达式模式可以帮助您编写几乎所有的密码验证

 

 

模式1:

 

密码必须包含1到9之间的一个数字、一个小写字母、一个大写字母、一种特殊字符、无空格,并且长度必须为8-16个字符。

/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)(?!.* ).{8,16}$/

 

说明:

 

(?=.*[0-9])表示密码必须包含一个从1到9的数字。

 

(?=.*[a-z])表示密码必须包含一个小写字母。

 

(?=.*[A-Z])表示密码必须包含一个大写字母。

 

(?=.*\W)表示密码必须包含一个特殊字符。

 

.{8,16}表示密码长度必须为8-16个字符。我们必须在正则表达式的末尾,就在$符号之前使用它。

 

什么是^和$:

 

^表示字符串的开头。$表示字符串的结尾。

如果不使用这些^&$,正则表达式将无法确定密码的最大长度。在上面的示例中,我们有一个条件,即密码不能超过16个字符,为了使该条件有效,我们使用了这些^&$

 

删除最大长度限制:

 

而不是{8,16},如果我们使用。{8,},这意味着密码长度必须至少为8个字符。因此,不存在检查密码最大长度的任何条件。

 

不接受任何数字(数字):

 

如果使用(?!.*[0-9])而不是(?=.*[0-10]),则意味着密码不能包含1-9之间的任何数字(与(?=.*[0-0])的区别是使用!而不是=)

 

不接受任何特殊字符:

 

如果我们使用(?!.*\W)而不是(?=.*\W),则意味着密码不能包含任何特殊字符(与(?=.*\W的区别在于使用!而不是=)

 

数字(数字)的替代语法:

 

我们可以使用(?=.*\d)代替(?=.*\d)。(?=..*\d)也意味着密码必须包含1到9之间的一个数字。

 

 

模式2:

 

密码必须包含1到9之间的一个数字、一个小写字母、一个大写字母、一条下划线,但不能包含其他特殊字符、空格,并且长度必须为8-16个字符。

/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*_)(?!.*\W)(?!.* ).{8,16}$/

 

与模式1的区别

 

这里,我们使用了模式1中没有的(?=.*_)。

 

(?=.*_)(?!.*\W)表示密码必须包含下划线,但不能包含任何其他特殊字符。

 

模式3:

 

密码必须包含1到9之间的一个数字、一个小写字母、一个大写字母、一条下划线、无空格,并且长度必须为8-16个字符。除下划线外,任何其他特殊字符的使用都是可选的。

/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*_)(?!.* ).{8,16}$/

 

与模式2的区别

 

这里,我们没有使用(?!.*\W)模式2上的内容。

 

但它仍然具有(?=.*_)

 

通过删除(?!.*\W),特殊字符已成为可选字符。现在,需要一个下划线,但可以使用或不使用任何其他特殊字符,因为它是可选的。

 

模式4:

 

密码必须包含1到9之间的一个数字、一个小写字母、一个大写字母和一个下划线,并且长度必须为8-16个字符。任何其他特殊字符的使用和空格的使用都是可选的。

/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}$/

 

与模式3的区别

 

这里,我们没有使用模式3中的(?=.*_)&(?!.*)。

 

通过删除(?=.*_),不再强制传递一个下划线。现在,传递特殊字符是可选的。

 

通过删除(?!.*),空间的使用也变得可选。

其他回答

您可以使用下面的正则表达式模式检查密码是否符合您的期望。

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})

使用这个,

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%?=*&]).{8,20})

它将验证至少一个小写、一个大写、一个数字以及(!、@、#、$、%、?、=、*、&)的特殊字符。

最小长度为8,最大长度为20

正则表达式没有AND运算符,因此很难编写与有效密码匹配的正则表达式,因为有效性是由“AND”或“AND”定义的。。。

但是,正则表达式确实有一个OR运算符,所以只需应用DeMorgan定理,并编写一个匹配无效密码的正则表达式:

任何少于八个字符的东西,任何没有数字的东西,或者任何没有大写字母的东西,或任何没有小写字母的东西或者任何没有特殊字符的东西。

So:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

如果有任何内容与此匹配,则是无效密码。

使用以下Regex满足以下条件:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

正则表达式:^(?=.*\d)(?=..*[#$@!%&*?])[A-Za-z\d#$@?%&*!]{8,}$可以在线测试:https://regex101.com

另一种选择是使用否定字符类在前瞻断言中使用对比度,可以选择匹配任何字符,但在匹配应该匹配的字符之前列出的字符除外。

^(?=[^A-Z\n]*[A-Z])(?=[^a-z\n]*[a-z])(?=[^0-9\n]*[0-9])(?=[^#?!@$%^&*\n-]*[#?!@$%^&*-]).{8,}$

查看正则表达式演示

在部分情况下,模式匹配:

^字符串的开头(?=[^A-Z\n]*[A-Z])正向前瞻,断言除A-Z或换行外的任何字符的0+倍。然后匹配字符a-Z(?=[^a-z\n]*[a-z])字符a-z的方法相同(?=[^0-9\n]*[0-9])数字0-9的方法相同(?=[^#?!@$%^&*\n-]*[#?!@$%^&*-])对于您认为特殊的字符,使用相同的方法.{8,}匹配除换行符以外的任何字符的8倍或更多倍$字符串结尾

笔记

点也可以与空格匹配。如果您不想允许匹配空间,那么。{8,}可以更改为\S{8}以匹配8个或更多非空白字符使用任意一种。或/S可以匹配比前瞻断言中指定的字符更多的字符。如果只想匹配断言中使用的字符,可以进行更改。{8,}使用字符类仅匹配允许的字符[#?!@$%^&*A-Za-z0-9-]{8、}

常量正则表达式=/^(?=[^A-Z\n]*[A-Z])(?=[^A-Z\n]*[A-Z])((?=[^0-9\n]*[0-9])(!=[^#?!@$%^&*\n-]*[#?!@$%^&*-])。{8,}$/;[“abcA1#!A”,“#!asdfSFD1;”,“#a f F1;”,"1111111111",“aaaaaaa”,"11111111",“aaaaaaa”,"########",“aA1#”].对于每个(s=>console.log(正则表达式测试)`匹配-->${s}`:`不匹配-->$}`));