5

我是正则表达式的新手。
我需要使用 php 验证密码,并使用 Regex 使用以下密码策略:

密码:

  1. 必须至少有 8 个字符
  2. 必须有2个数字
  3. 允许的符号是:! @ # $ % *

我尝试了以下方法: /^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]$/

4

4 回答 4

9

以下内容完全符合您的要求:^(?=.*\d.*\d)[0-9A-Za-z!@#$%*]{8,}$

在线演示 <<< You don't need the modifiers, they are just there for testing purposes.

解释

  • ^: 匹配字符串的开头
  • (?=.*\d.*\d): 正向前瞻,检查是否有 2 位数字
  • [0-9A-Za-z!@#$%*]{8,}: 匹配数字、字母和!@#$%*8 次或更多次
  • $: 匹配字符串结尾
于 2013-08-11T19:43:22.263 回答
0

我会首先尝试使用非正则表达式(或preg_match_all('[0-9]', ...) >= 2,然后验证:

^[!@#$%*a-zA-Z0-9]{8,}$

这应该更快更容易理解。要仅使用正则表达式声音来做到这一点,您需要先行,它基本上会扫描表达式两次 afaik,尽管我不确定那个的 PHP 内部结构。

准备好接受很多关于密码不被接受的投诉。我个人有很大一部分密码无法针对这些限制进行验证。像这样无意义的密码12345678也会验证,甚至是11111111,但不是f4#f@faASvCXZr$%%zcorrecthorsebatterystaple

于 2013-08-11T19:39:27.600 回答
0
if(preg_match('/[!@#$%*a-zA-Z0-9]{8,}/',$password) && preg_match_all('/[0-9]/',$password) >= 2)
{
    // do
}
于 2013-08-12T01:09:49.987 回答
0

使用 PHP 进行完整的强密码验证

  • 最少 8 个字符长
  • 最小一位数
  • 最小一个大写
  • 最小一个小写
  • 最小一号特殊字符

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

演示在这里

于 2021-09-24T10:52:31.050 回答