2

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

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

密码必须:

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

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

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

4

1 回答 1

7
  1. 8 到 16 个字符之间:

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

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

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

    (?=.*\d)
    

把它放在一起:

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

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

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

这通过在开头有一些积极的前瞻断言来工作,每个断言都会检查字符串的一个所需属性。前瞻断言检查括号中的部分是否可以在此位置匹配,但不会推进字符串中的实际匹配位置。这里的实际匹配只是确保长度符合您的要求。

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

哦,至少一个符号可以用同样的(?=.*[,.!?])或类似的东西来检查,这取决于你认为什么是符号。

于 2012-10-16T12:47:03.453 回答