好的,所以我正在尝试使用正则表达式 preg_match 一个字符串(输入的密码),但是在互联网上阅读/观看正则表达式信息数小时后,我仍然不明白它..
我目前有:
'/^[AZ]^[az]+$/'
密码必须:
介于 8 到 16 个字符之间。
至少包含 1 个大写字母
包含至少 1 个小写字母
包含至少 1 个数字
如果您还可以包含具有上述所有要求但还
包含至少 1 个符号的正则表达式
对于我自己的学习,我将不胜感激。请尝试解释您的正则表达式,以便我可以理解它。谢谢!
好的,所以我正在尝试使用正则表达式 preg_match 一个字符串(输入的密码),但是在互联网上阅读/观看正则表达式信息数小时后,我仍然不明白它..
我目前有:
'/^[AZ]^[az]+$/'
密码必须:
介于 8 到 16 个字符之间。
至少包含 1 个大写字母
包含至少 1 个小写字母
包含至少 1 个数字
如果您还可以包含具有上述所有要求但还
包含至少 1 个符号的正则表达式
对于我自己的学习,我将不胜感激。请尝试解释您的正则表达式,以便我可以理解它。谢谢!
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}$
这通过在开头有一些积极的前瞻断言来工作,每个断言都会检查字符串的一个所需属性。前瞻断言检查括号中的部分是否可以在此位置匹配,但不会推进字符串中的实际匹配位置。这里的实际匹配只是确保长度符合您的要求。
但请注意,这在计算上应该与检查每个属性的几个正则表达式匹配基本上相同。它只是打包在一个正则表达式中。
哦,至少一个符号可以用同样的(?=.*[,.!?])
或类似的东西来检查,这取决于你认为什么是符号。