创建preg_match以进行密码验证(!@#$%)

Mar*_*mel 10 php regex passwords preg-match

我想创建一个preg_match函数来验证我的passowrds,但我不知道如何写它以允许使用以下特殊字符:!@#$%.

if(!preg_match(?????)$/', $password))
Run Code Online (Sandbox Code Playgroud)

这是我想要在正则表达式中使用的密码规则:

  • 可能包含字母和数字
  • 必须包含至少1个数字和1个字母
  • 可能包含以下任何字符: !@#$%
  • 必须是8-12个字符

感谢您提供的任何帮助.

r3b*_*bel 52

我认为这应该是这样的:

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) {
    echo 'the password does not meet the requirements!';
}
Run Code Online (Sandbox Code Playgroud)

在 字符串的开始 - > ^
和结束 - > $
之间必须至少有一个数字 - > (?=.*\d)
和至少一个字母 - > (?=.*[A-Za-z])
并且它必须是数字,字母或以下之一:!@#$% - > [0-9A-Za-z!@#$%]
并且必须有8-12个字符 - >{8,12}

当用户557846对您的问题发表评论时,我还建议您允许更多字符,我通常(如果我使用最大值)至少需要50 :)

顺便说一句,你可能想看看这个正则表达式教程

  • 谢谢!这对我有用.谢谢你解释它的每一部分.这真的有助于我更好地理解这一点.我还探讨了你建议的教程,这看起来像下次我正在处理正则表达式时的一个很好的资源.我已经制作了最多50个字符. (3认同)

小智 9

preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z@#\-_$%^&+=§!\?]{8,20}$/',$password)
Run Code Online (Sandbox Code Playgroud)
  • 至少一个小写字母
  • 至少一个大写字母
  • 至少一位数
  • @#-_ $%^&+ =§!的至少一个特殊标志?