FreedomLy's blog.

【每周一坑】注册表单验证

字数统计: 879阅读时长: 3 min
2017/10/13 Share

用Python实现类似于网页表单信息验证的功能。

基本要求:

  1. 需要输入邮箱地址、密码两项
  2. 邮箱地址需要满足形如xxx@xxx.xx的正常邮箱格式,(中间有一个@,后半段至少有一个.),并且不包含空格
  3. 密码需要8位以上,必须包含大写字母、小写字母和数字三种字符(三种都要有)
  4. 重名验证

思路:
通过正则表达式来实现

正则表达式

正则表达式库

Python中有正则表达式标准库,引入正则表达式库Re即可:

1
import re

由于Python的字符串本身也用\转义,因此建议使用Python的r前缀,就可以避免Python字符串转义的问题了。

正则表达式特殊字符

在这里介绍一下正在表达式的特殊字符,具体的匹配可以参考正则表达式-菜鸟教程

特殊字符就是指有特殊含义的字符,在正则表达式中,它们负责了除本身字符含义之外的工作,如*表示匹配某字符串零次或多次,如果想要匹配*,则需要转义,即匹配\*,这样就是匹配*这个字符。正则表达式的特殊字符如下表所示:

特殊字符 描述
\$ 匹配输入字符串的结尾位置
() 标记一个子表达式的开始和结束位置
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
. 匹配除换行符\n之外的任何单字符
[] 标记一个中括号表达式的开始和结束位置
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符
\ 将下一个字符标记为特殊字符或原义字符或向后引用或八进制转义符
^ 匹配输入字符串的开始位置,在方括号表达式中使用时,表示非字符集
{} 标记限定符表达式的开始
| 指明两项之间的一个选择

验证邮箱

1
checkEmail = re.compile(r'^(\w+_?-?\.?\w*)@([\w+\.]+[a-zA-Z]+$)')

验证密码

1
checkPwd = re.compile(r'^(?=.*[0-9].*)(?=.*[A-Z].*)(?=.*[a-z].*).{8,}$')

重名验证

没有用数据库,采用了文本文档存储已注册邮箱的方式,每次注册都要查询文本中的邮箱,是否有重复的,如果有重复的,提示邮箱重复,输入其他邮箱;否则注册通过,将新的邮箱地址存入文本中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 打开存储邮箱地址的文档,如果不存在则新建
if no os.path.exists('./users.txt'):
f = open('./users.txt', 'w')
f.close()

# 读取文本中的邮箱地址,存入一个list,后面验证重名时使用
with open('./users.txt', 'r') as f:
userName = f.readlines()

# 验证重名
def check_email(email_address):
while not checkEmail.match(email_address):
email_address = input('邮箱地址格式不正确,请重新输入: ')
if email_address + '\n' in userName:
email_address = input('邮箱地址已注册,请输入其他邮箱: ')
check_email(email_address)
else:
print('邮箱地址可用!')
return email_address

验证密码是否符合要求

1
2
3
4
5
def check_pwd(password):
while not checkPwd.match(password):
print('密码需要8位以上,包含大小写和数字。请重新输入。')
password = input('密码: ')
return password

主程序

1
2
3
4
5
6
7
8
9
10
11
12
13
# check email address
emailAdd = input('请输入邮箱地址: ')
emailAdd = check_email(emailAdd)
print('邮箱地址: ', emailAdd)

# check password
pwd = input('密码: ')
pwd = check_pwd(pwd)

# 保存新注册的邮箱
with open('./users.txt', 'a') as f:
f.write(emailAdd + '\n')
print('注册成功!')

CATALOG
  1. 1. 正则表达式
    1. 1.1. 正则表达式库
    2. 1.2. 正则表达式特殊字符
  2. 2. 验证邮箱
  3. 3. 验证密码
  4. 4. 重名验证
  5. 5. 验证密码是否符合要求
  6. 6. 主程序