密码的正则表达式必须包含至少八个字符,至少一个数字以及大小写字母和特殊字符

IT技术 javascript asp.net regex
2021-01-15 20:46:30

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

密码至少包含八个字符,其中至少包含一个数字,同时包含大小写字母和特殊字符,例如#, ?, !

它不能是您的旧密码或包含您的用户名"password",或"websitename"

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

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

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

6个回答

最少八个字符,至少一个字母和一个数字:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

最少八个字符,至少一个字母,一个数字和一个特殊字符:

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

最少八个字符,至少一个大写字母,一个小写字母和一个数字:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

最少八个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符:

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

最少 8 个,最多 10 个字符,至少 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$" 不允许符号作为 8 个字符之一
2021-03-16 20:46:30
密码必须始终具有完全相同的顺序。什么可以以大写或特殊字符开头的更通用的东西。
2021-03-19 20:46:30
我可以说正则表达式不包含符号 '" ~`,.<>;: ()[]{}
2021-03-22 20:46:30
我发现以下允许所有字符(特殊和标点符号),而不是强制它们:“^(?=.*[az])(?=.*[AZ])(?=.*\d)[a- zA-Z\d\w\W]{8,}$"
2021-03-29 20:46:30
@dcp 你可以用这个 ^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[#@$!%*?&-]) [A-Za-z\d@#$!%*?&-]{8,}$ 如果你想要它们,只需在此处添加其他特殊字符,例如 ^
2021-03-30 20:46:30

您可以将此正则表达式与多个先行断言(条件)一起使用

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

此正则表达式将强制执行以下规则:

  • 至少一个大写英文字母(?=.*?[A-Z])
  • 至少一个小写英文字母, (?=.*?[a-z])
  • 至少一位数, (?=.*?[0-9])
  • 至少一个特殊字符, (?=.*?[#?!@$%^&*-])
  • 长度至少为八.{8,}(带锚)
这正是我需要的细分。谢谢!
2021-03-26 20:46:30
为什么我们需要 ^ 和 $?我在没有 ^$ 的情况下测试正则表达式工作正常。有什么例外吗?
2021-03-26 20:46:30
谢谢@anubhava,如何从中删除最小 8 条件我试过 '^(?=.*?[AZ])(?=.*?[az])(?=.*?[0-9])(? =.*?[#?!@$%^&*-])$' 但没有用
2021-03-30 20:46:30
我使用这个是因为它可以处理空格。
2021-04-05 20:46:30
只需使用 .+ 而不是 .{8,}
2021-04-08 20:46:30

正则表达式没有 AND 运算符,因此当有效性由某些东西和其他东西以及其他东西定义时,很难编写匹配有效密码的正则表达式......

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

任何少于八个字符什么没有数字没有大写什么什么的,没有小写不带特殊字符的任何东西。

所以:

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

如果有任何匹配,那么它是一个无效的密码。

为什么我以前没有想过?很好的答案(当可以否定结果时)
2021-03-10 20:46:30
@AlanMoore 我认为正则表达式是正则表达式的缩写。有什么不同?
2021-03-18 20:46:30
好吧,我是怕你的计算机科学家,我们有时会谁不知道有之间的差异的一个正则表达式正则表达式;) 如果您之后可以否定匹配结果,许多正则表达式任务确实要简单得多,但这并不总是可行的。不过,这是一个漂亮的正则表达式。不简单,很优雅!
2021-04-02 20:46:30
这是允许空格如何检查密码不应该包含您的正则表达式的空格?我试过这个 /^(\s|.{0,7}|[^0-9]*|[^AZ]*|[^az]*|[^$#@%]*|\s)$/ .test('aAa#a1a aa'); 但它不起作用
2021-04-07 20:46:30
@mikekoscinski 您存储的是哈希值,而不是密码,并且哈希值是固定长度的,因此密码可以是您喜欢的长度……如果您的记忆力非常好。
2021-04-07 20:46:30

对@anubhava 的回答只是一个小小的改进:由于特殊字符仅限于键盘中的字符,因此请将其用于任何特殊字符:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

此正则表达式将强制执行以下规则:

  • 至少一个大写英文字母
  • 至少一个小写英文字母
  • 至少一位
  • 至少一个特殊字符
  • 长度至少为八
要考虑下划线的特殊字符以及其他一些进一步的改进,请尝试例如:^(?=[^A-Z\s]*[A-Z])(?=[^a-z\s]*[a-z])(?=[^\d\s]*\d)(?=\w*[\W_])\S{8,}$
2021-03-09 20:46:30
以及如何避免空字符串。空字符串正则表达式应返回 true。我使用了以下正则表达式 (?=.*[0-9])(?=.*[az])(?=.*[AZ])(?=.*[@#$%^&+=]) (?=\\S+$)。{8,15}
2021-03-18 20:46:30
_ 特殊字符失败
2021-03-21 20:46:30
在 JavaScript 风格中, \W仅匹配 ASCII 字符。所以你没有改变它,现在你必须过滤掉空白字符。此外,{1,}您添加的所有括号和量词都是纯噪音,删除非贪婪 ( ?) 运算符毫无意义。这里没有改进。
2021-03-24 20:46:30

使用以下正则表达式来满足以下条件:

状况:

  1. 最少 1 个大写字母。
  2. 最少 1 个小写字母。
  3. 最少 1 个特殊字符。
  4. 最少 1 个号码。
  5. 最少 8 个字符。
  6. 最多 30 个字符。

正则表达式:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/
我发现只有一个可以成功阻止使用表情符号
2021-03-12 20:46:30
@JoshYates1980 能否请您提及正则表达式失败的“特殊字符”。让我验证一下并相应地更新它。但据我所知,它可以根据 1 个特殊字符的授权条件与所有人一起使用。等待你的回应......
2021-04-01 20:46:30
@SHASHANKHONRAO 我将表达式更新为: ^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[$@$!%*?&+ ~ |{}:;<>/])[A-Za-z\d$@$!%*?&+~|{}:;<>/]{8,15} 将包含以下非字母数字字符:(@$!%*?&+~`|{}:;<>/)
2021-04-02 20:46:30
你的答案在哪方面比几年前写的其他答案更好?
2021-04-07 20:46:30