【问题标题】:Regex help for password [duplicate]密码的正则表达式帮助[重复]
【发布时间】:2013-02-28 12:19:32
【问题描述】:

我想使用以下规则强制使用强密码:
- 一个小写字符
- 一个大写字符
- 一个号码
- 一个特殊字符

通过互联网搜索,我想出了这个:

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

但它在 rubular.com 上不成立 有什么帮助吗?

【问题讨论】:

  • 就我个人而言,我会运行 4 个简单的测试,更简单,这样您就可以准确地提示用户他们的选择有什么问题。
  • 另外,我认为例如«this is a wonderful passphrase foo bar» 比 e.g. «FooBar7@».

标签: javascript regex passwords


【解决方案1】:

试试这个:

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

说明:

(?=.*[a-z]) 密码必须在某处包含小写字母。

(?=.*[A-Z]) 密码必须在某处包含大写字母。

(?=.*[!@#$&*]) 密码必须在某处包含符号。

(?=.*[0-9]) 密码必须在某处包含一个数字。

所有这些都是前瞻,这意味着每个测试都没有实际包含在匹配中或向前移动匹配位置。因此,在所有这些测试之后,就匹配而言,我们仍然位于字符串的开头。

.{8,} 整个密码必须包含 8 个或更多字符。 (^$ 锚定到字符串的开头和结尾,因此它们确保匹配包含整个字符串)。

原来的问题是[a-zA-Z1-9]{8,}。这部分意味着整个密码必须由八个或更多的字母和数字组成。这与之前对出现特殊字符的要求相冲突。另外,原版没有把零算作数字,我觉得这很傻。

【讨论】:

  • 那是惊人的解释。谢谢你。将在 4 分钟内接受答案。 :)
猜你喜欢
  • 2011-02-04
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 2015-10-20
  • 1970-01-01
相关资源
最近更新 更多