本文主要是介绍众里寻他千百度之“您的密码安全吗?”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
您的密码达到如下要求了吗?
- 6至12位(不可低于6位,不高于12位)
- 只可包含数字、英文字母(包括大写及小写字母)、下划线
- 不可全为数字
有没有可能只用一个正则表达式就能检查出密码是否符合要求呢?
re_str = r'^(?!\d+$)[\dA-Za-z_]{6,12}$'
中括号里面包含了所有有效的可选字符,包括数字、大写字母、小写字母及下划线。
大括号作为限定符,表示:前面中括号里的有效字符至少需要出现6次,最多出现12次。
主要来看看: (?!pattern)
第一、这里的“小括号+问号+感叹号”,不作为分组,不获取匹配结果;
第二、“正向+否定”:从左向右检查,不可满足小括号里的pattern;
第三、只是“预查”,并不消耗字符,在任何不匹配pattern的字符开始处,进行后续的匹配查找。
我们来检验一下这个正则表达式:
import re
str = '1234567'
res = re.match(r'^(?!\d+$)[\dA-Za-z_]{6,12}$', str)
print("{}:{}".format(str, res))
1234567:None
import re
str = '123456A'
res = re.match(r'^(?!\d+$)[\dA-Za-z_]{6,12}$', str)
print("{}:{}".format(str, res))
123456A:<re.Match object; span=(0, 7), match='123456A'>
import re
str = 'abc_124'
res = re.match(r'^(?!\d+$)[\dA-Za-z_]{6,12}$', str)
print("{}:{}".format(str, res))
abc_124:<re.Match object; span=(0, 7), match='abc_124'>
总结一下(?!pattern)的特性:不获取、正向、否定、预查
这篇关于众里寻他千百度之“您的密码安全吗?”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!