实例3:用户注册验证
在很多网站上都有注册功能,用户在使用注册功能时,需要遵守网站的注册规则。例如,一个网站的用户注册页面中包含用户名、密码、手机号等信息,其中用户名规则为:长度为6~10个字符、以汉字、字母或下划线开头;密码规则为:长度为6~10个字符、必须以字母开头、包含字母、数字、下划线;手机号规则为:中国大陆手机号码。若用户输入的注册信息格式有误,系统会对用户进行提示。
本实例要求编写程序,模拟实现用户注册功能。
实例目标
- 掌握正则表达式的基本语法规则
- 掌握re模块中compile()方法的使用
- 掌握re模块中findall()方法的使用
实例分析
用户注册信息可以使用正则表达式实现。按用户注册页面的组成部分,可分为以下三种情况:
- 用户名对应的正则表达式为^[\u4E00-\u9FA5A-Za-z0-9_]{6,10}$。
- 密码对应的正则表达式为^[a-zA-Z]\w{5,9}$.
- 手机号对应的正则表达式为^1[03456789]\d{9}$
代码实现
import re
def user_registration():
print("注册提示:")
print("账号长度为6~10个字符,可使用汉字、字母、数字、下滑线开头\n"
"密码长度为6~10个字符,包含大小写字母及下划线,需以字母开头\n"
"手机号为中国大陆手机号")
user_name = input("请输入账号:")
user_pwd = input("请输入密码:")
user_phone_num = input("请输手机号:")
while True:
# 用户名长度为6~10个字符,可包含汉字、大小写字母和下划线
reg_user = re.compile(r"^[\u4E00-\u9FA5A-Za-z0-9_]{6,10}$")
# 密码长度为6~10个字符,必须以字母开头,包含字母、数字、下划线
reg_pwd = re.compile(r"^[a-zA-Z]\w{5,9}$")
# 手机号码匹配规则
reg_phone = re.compile(r'^1[03456789]\d{9}$')
if re.findall(reg_user, user_name):
if re.findall(reg_pwd, user_pwd):
if re.findall(reg_phone, user_phone_num):
print("注册成功")
break
else:
print("手机号码格式不正确")
user_phone_num = input("请重新输入手机号:")
else:
user_pwd = input("请重新输入密码:")
else:
user_name = input("请重新输入账号:")
if __name__ == '__main__':
user_registration()
以上代码定义了一个函数uses_register(),该函数中首先打印注册提示信息,并接收用户输入的用户名、密码、手机号,然后将正则表达式进行预编译成reg_user、reg_pwd和reg_phone对象,使用if-else语句判断用户输入的内容是否符合规则:若符合规则,则输出“注册成功”,否则要求用户重新输入符合规则的内容。
代码测试
运行程序,输入符合规则的内容的结果如下:
注册提示:
账号长度为6~10个字符,可使用汉字、字母、数字、下滑线开头
密码长度为6~10个字符,包含大小写字母及下划线,需以字母开头
手机号为中国大陆手机号
请输入账号:_itcast
请输入密码:test123
请输手机号:15732622380
注册成功
运行代码,输入不符合规则的内容的结果如下:
注册提示:
账号长度为6~10个字符,可使用汉字、字母、数字、下滑线开头
密码长度为6~10个字符,包含大小写字母及下划线,需以字母开头
手机号为中国大陆手机号
请输入账号:test_python
请输入密码:python123
请输手机号:15732622380
请重新输入账号: