【正则表达式实战运用】表单验证功能原来是这样实现的

在这里插入图片描述


前言

继续练习探索正则表达式在实际场景中的运用,本次项目内容也是我自编自导自演的哈。

——

一、问题背景

相信各位都一定在XX软件或者XX平台注册过账号,注册账号时会需要你填写用户名、密码、手机号、电子邮件等等信息。

如果你填写的某项表单不符合要求,那些系统就会报错,进而无法进入到下一步操作。

那么对于用户所填表单内容进行验证的功能,就是正则表达式最最常见的实际用法之一。

本次就来练习一下,利用正则表达式设计一个简单的表单验证程序。

图示如下:
在这里插入图片描述
要求:

  1. 用户输入信息需满足各自的限定条件
  2. 用户按照提示一次性输入所有信息内容
  3. 最后程序根据用户输入信息是否符合规定打印结果。如果信息合法显示“通过”,如果信息不合法显示“不通过”并显示相应的正确提示语句。

程序运行的最终结果应该大致是这样的:
在这里插入图片描述
——

二、功能分析

第一步:构建正则表达式

  • 根据相应的项目要求,构建所有正则表达式
  • 具体包括:用户名、密码及确认密码、电话号码、电子邮箱和身份证号码的正则表达式

第二步:依次匹配用户输入信息

  • 用input函数一次性获取所有内容信息
  • 将用户输入信息依次与各正则表达式进行匹配

第三步:打印信息

  • 判定用户输入信息是否符合规则,并打印出相应的结果
  • 如果信息合法显示“通过”
  • 如果信息不合法显示“不通过”并显示相应的正确提示语句

框架如下:

import re

# 第一步:构建正则表达式

# 【01】构建用户名正则表达式(仅由中文汉字、英文字母、数字组成,长度3-16位)
# 【02】构建登录密码正则表达式(仅由英文字母、数字、下划线组成,要求密码中同时包含大小写字母和数字,长度8-16位)
# 【03】构建手机号码正则表达式(请输入正确的11位手机号码)
# 【04】构建电子邮件正则表达式(请输入正确的电子邮箱地址)
# 【05】构建身份证号码正则表达式(请输入正确的15位或18位身份证号码)

# 第二步:依次匹配用户输入信息

# 第三步:打印信息

——

三、代码实现

那么我们就来正式写完整的代码了,具体的解释说明也在代码中进行注释。

import re

# 第一步:构建正则表达式

# 【01】构建用户名正则表达式(仅由中文汉字、英文字母、数字组成,长度3-16位)
usernameRegex = re.compile(r'^[\u4e00-\u9fa5a-zA-Z0-9]{3,16}$')    # 中间的一大串可以用\w代替,其中[\u4e00-\u9fa5]代表中文字符

# 【02】构建登录密码正则表达式(仅由英文字母、数字、下划线组成,要求密码中同时包含大小写字母和数字,长度8-16位)
passwordRegex = re.compile(r'^((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])).{8,16}$')    # 涉及零宽断言的知识

# 【03】构建手机号码正则表达式(请输入正确的11位手机号码)
numberRegex = re.compile(r'^\d{11}$')

# 【04】构建电子邮件正则表达式(请输入正确的电子邮箱地址)
mailRegex = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.([a-zA-Z]{2,4})$')

# 【05】构建身份证号码正则表达式(请输入正确的15位或18位身份证号码)
idRegex = re.compile(r'^((\d{15}|\d{17}(\d|X|x)))$')   # 其中18位身份证号码的最后一位可能是X

# 第二步:依次匹配用户输入信息

username = input('请输入用户名(仅由中文汉字、英文字母、数字组成,长度3-16位):\n')
password = input('请输入密码(仅由英文字母、数字、下划线组成,要求密码中同时包含大小写字母和数字,长度8-16位):\n')
password2 = input('请再次输入密码(与上面输入密码保持一致):\n')
number = input('请输入电话号码(请输入正确的11位手机号码):\n')
mail = input('请输入邮箱地址(请输入正确的电子邮箱地址):\n')
idnubmer = input('请输入身份证号码(请输入正确的15位或18位身份证号码):\n')

# 利用re.match进行验证
mo1 = usernameRegex.match(username)  
mo2 = passwordRegex.match(password)
mo3 = numberRegex.match(number)
mo4 = mailRegex.match(mail)
mo5 = idRegex.match(idnubmer)

# 第三步:打印信息

print('\n\n*************************************结果显示***************************************')

print('用户名验证:\n')
if mo1:
	print('通过')
else:
	print('不通过,用户名仅由中文汉字、英文字母、数字组成,长度3-16位')
print('--------------------------------------------------------------------------------------\n')

print('密码验证:\n')
if mo2:
	print('通过')
else:
	print('不通过,密码仅由英文字母、数字、下划线组成,要求密码中同时包含大小写字母和数字,长度8-16位')
print('\n--------------------------------------------------------------------------------------')

print('密码确认:')
if (password2 == password) and (mo2 != None):
	print('通过')
else:
	print('不通过,请重新检查')
print('\n--------------------------------------------------------------------------------------')

print('电话号码验证:')
if mo3:
	print('通过')
else:
	print('不通过,请输入正确的11位手机号码')
print('\n--------------------------------------------------------------------------------------')

print('电子邮箱验证:')
if mo4:
	print('通过')
else:
	print('不通过,请输入正确的电子邮箱地址')
print('\n--------------------------------------------------------------------------------------')

print('身份证号码验证:')
if mo5:
	print('通过')
else:
	print('不通过,请输入正确的15位或18位身份证号码')
print('\n--------------------------------------------------------------------------------------')

具体的测试过程就不再这里演示了,小试了下,基本不按照规则输入信息的都会显示“不通过”。

——

四、复盘总结

  1. 关键点还是在于各种正则表达式本身的构造,如何将需求转化为代码
  2. 新学习到了中文字符的正则表达式:[\u4e00-\u9fa5]
  3. 通过构造要求同时含有大小写字符和数字的密码正则表达式,初步知道了零宽断言的知识,当然还需要再进一步学习总结。

——
在这里插入图片描述

发布了35 篇原创文章 · 获赞 35 · 访问量 2743

猜你喜欢

转载自blog.csdn.net/nilvya/article/details/104198312