🏠大家好,我是Yui_,目标成为全栈工程师~💬
🍑如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🚀如有不懂,可以随时向我提问,我会全力讲解~
🔥如果感觉博主的文章还不错的话,希望大家关注、点赞、收藏三连支持一下博主哦~!
🔥你们的支持是我创作的动力!
🧸我相信现在的努力的艰辛,都是为以后的美好最好的见证!
🧸人的心态决定姿态!
💬欢迎讨论:如有疑问或见解,欢迎在评论区留言互动。
👍点赞、收藏与分享:如觉得这篇文章对您有帮助,请点赞、收藏并分享!
🚀分享给更多人:欢迎分享给更多对编程感兴趣的朋友,一起学习!
1.案例引入
本文将会先介绍什么是正则表达式,然后在介绍正则表达式在python中的应用。
下方图片及案例思路来自:正则表达式
在没有学习正则表达式前,当你被要求实现上图的功能,你会怎么实现呢?肯定就是将上面的要求一个个拆分出来逐个击破。
密码设置的规则:
- 密码长度为6~16位。
- 密码必须同时数字以及包含大小写字母和特殊字符。
def checkPassword(password):
if(password == None):
return False
if(len(password)>16 or len(password)<6):
return False
hasNumber = False
hasSmallLetter = False
hasBigLetter = False
hasSpecialChar = False
arr = '~@#$%*_-+=:.?'
for c in password:
if '0'<=c<='9':
hasNumber = True
elif 'a'<=c<='z':
hasSmallLetter = True
elif 'A'<=c<='Z':
hasBigLetter = True
elif c in arr:
hasSpecialChar = True
else:
return False
return hasNumber and hasSmallLetter and hasBigLetter and hasSpecialChar
下面是验证:
#测试用例分别为:长度不够,完全符合,含有无效字符,长度过长,不含数字,不含小写字母,不含大写字母,不含特殊字符
passwords = ['aA1#a','AAA123__a','adasd1AS$$\\','asd232ASD&&asdqwasfa2','asdadASD$%','123ASD$$$$','123asd$','123qweASD']
for s in passwords:
print(checkPassword(s))
#打印结果:
#False
#True
#False
#False
#False
#False
#False
#False
这是我们的没有学习过正则表达式的做法,代码量还是比较多的,但是如果运用正则表达式,可以将代码量压缩到一行。
import re
import numpy as np
def checkPassword(password):
return bool(re.fullmatch(r'^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#\$%*_\-+=:.?])[A-Za-z0-9~@#\$%*_\-+=:.?]{6,16}$', password)) # 返回布尔值表示是否符合
美化一下验证代码:
# 测试用例
passwords = [
'aA1#a', # 长度不够
'AAA123__a'