好的,所以我试图用正则表达式preg_match一个字符串(一个输入的密码),但是在互联网上阅读/观看正则表达式信息几个小时后我仍然不明白..
我目前有:
'/ ^ [A-Z] ^ [A-Z] + $ /'
密码必须:
8到16个字符
包含至少1个大写字母
至少包含1个小写字母
包含至少1个数字
如果您还可以包含具有上述所有要求的正则表达式,还可以包含
至少包含1个符号
为了我自己的学习,我将不胜感激。 请尝试解释您的正则表达式,以便我可以理解它。谢谢!
答案 0 :(得分:7)
8到16个字符:
^.{8,16}$
至少一个大写字母
(?=.*[A-Z])
至少一个小写字母
(?=.*[a-z])
至少一个号码
(?=.*\d)
把它放在一起:
^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,16}$
如果你想要一个支持Unicode的变种(我可能知道PHP可能是徒劳的):
^(?=.*\p{Lu})(?=.*\p{Ll})(?=.*\p{Nd}).{8,16}$
这通过在开头有一些positive lookahead assertions来工作,每个{{3}}检查你的字符串的一个所需属性。 Lookahead断言检查括号中的部分是否在此位置匹配,但不会提升字符串中实际匹配位置。这里的实际匹配只是确保长度符合您的要求。
但请注意,这应该与几个正则表达式匹配检查每个属性的计算基本相同。它只是打包在一个正则表达式中。
哦,至少可以用(?=.*[,.!?])
或类似的东西检查一个符号,具体取决于你认为的符号。