密码字段正则表达式

Geo*_*rge 2 php regex validation preg-replace

好的,所以我试图用正则表达式preg_match一个字符串(一个输入的密码),但在互联网上阅读/观看正则表达式信息几个小时后,我仍然不明白它..

我目前有:
'/ ^ [AZ] ^ [az] + $ /'

密码必须:

介于8到16个字符之间.
至少包含1个大写字母
包含至少1个小写字母
包含至少1个数字

如果您还可以包含具有上述所有要求的正则表达式,但也
包含至少1个符号

为了我自己的学习,我将不胜感激.请尝试解释您的正则表达式,以便我可以理解它.谢谢!

Joe*_*oey 7

  1. 8到16个字符:

    ^.{8,16}$
    
    Run Code Online (Sandbox Code Playgroud)
  2. 至少有一个大写字母

    (?=.*[A-Z])
    
    Run Code Online (Sandbox Code Playgroud)
  3. 至少一个小写字母

    (?=.*[a-z])
    
    Run Code Online (Sandbox Code Playgroud)
  4. 至少一个号码

    (?=.*\d)
    
    Run Code Online (Sandbox Code Playgroud)

把它放在一起:

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,16}$
Run Code Online (Sandbox Code Playgroud)

如果你想要一个支持Unicode的变种(可能对PHP无效,我知道):

^(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\p{Nd}).{8,16}$
Run Code Online (Sandbox Code Playgroud)

这通过在开头具有许多正向前瞻断言来工作,每个断言检查字符串的一个期望属性.Lookahead断言检查括号中的部分是否可以在此位置匹配,但不会提升字符串中的实际匹配位置.这里的实际匹配只是确保长度符合您的要求.

但请注意,这应该与几个正则表达式匹配检查每个属性的计算基本相同.它只是打包在一个正则表达式中.

哦,(?=.*[,.!?])根据您认为的符号,至少可以使用或类似的方式检查一个符号.