密码字段正则表达式

时间:2012-10-16 12:38:02

标签: php regex validation preg-replace

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

我目前有:
    '/ ^ [A-Z] ^ [A-Z] + $ /'

密码必须:

8到16个字符 包含至少1个大写字母
至少包含1个小写字母
包含至少1个数字

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

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

1 个答案:

答案 0 :(得分:7)

  1. 8到16个字符:

    ^.{8,16}$
    
  2. 至少一个大写字母

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

    (?=.*[a-z])
    
  4. 至少一个号码

    (?=.*\d)
    
  5. 把它放在一起:

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

    如果你想要一个支持Unicode的变种(我可能知道PHP可能是徒劳的):

    ^(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\p{Nd}).{8,16}$
    

    这通过在开头有一些positive lookahead assertions来工作,每个{{3}}检查你的字符串的一个所需属性。 Lookahead断言检查括号中的部分是否在此位置匹配,但不会提升字符串中实际匹配位置。这里的实际匹配只是确保长度符合您的要求。

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

    哦,至少可以用(?=.*[,.!?])或类似的东西检查一个符号,具体取决于你认为的符号。

相关问题