Regex Password Validation
python正则表达式验证密码格式是否正确
要求:
- 包含大写字母
- 包含小写字母
- 包含数字
- 长度至少六位
参考答案:
regex=r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])[a-zA-Z\d]{6,}$"
注意 前瞻搜索(?=)是不占字符的,即:
I (?=am) Alice.
解析字符串 I am Alice时,
结果为 null
因为前瞻搜索不占用字符,即它确保am前面有个I,但是它不会消耗这个am,
而am Alice与 Alice不匹配
r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])[a-zA-Z\d]{6,}$"
比如 解析字符串:Alice001
(?=.*[a-z])
前面要有^(?=.*[\d])(?=.*[A-Z])
(?=.*[A-Z])
前面要有^(?=.*[\d])
^
匹配开头,即开头需要是(?=.*[\d])
(?=.*[\d])
和Alice001
相符,但是(?=.*[\d])
不会消耗掉Alice001
,后面的匹配依然从Alice001
的'A'
开始,(?=.*[\d])
的作用是确保字符串里面一定会有一个数字
同理(?=.*[A-Z])(?=.*[a-z])
分别确保有大写和小写字母
真正消耗字符的是[a-zA-Z\d]{6,}
,它消耗掉Alice001
,且确保字符串长度至少为6
$
表示以(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])[a-zA-Z\d]{6,}
结尾,
即如果字符串是a112fjd3IR9.;
,它将不匹配,因为它是以;
结尾的,
如果不加$
符号,那么
r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])[a-zA-Z\d]{6,}"
匹配 a112fjd3IR9.;
会成功,结果是a112fjd3IR9
,这就不符合题目要求了,所以开头需要^
,结尾需要$