菜鸟使用python实现正则检测密码合法性


Posted in Python onJanuary 05, 2016

客户系统升级,要求用户密码符合一定的规则,即:包含大小写字母、数字、符号,长度不小于8,于是先用python写了个简单的测试程序:

在写解决方案前,列一下

python正则表达式中的特殊字符:

^          表示匹配的字符必须在最前边

$          表示匹配的字符必须在最后边

*          匹配* 前面的字符0次或n次

+          匹配+ 前面的字符1次或n次

?          匹配?前面的字符0次或1次

.           (小数点)匹配除换行符外的所有字符
(x)        匹配x并记录匹配的值

x|y       匹配x或者y

{n}       这里n是一个正整数。匹配前面的n个字符

{n,}   这里n是一个正整数。匹配至少n个前面的字符

{n,m} 这里n和m都是正整数。匹配至少n个、最多m个前面的字符
[xyz]      字符列表,匹配表中的任一字符,可以通过连接字符 - 指出字符范围,如 [a-z] 表示所有小写字符

[b]        匹配一个空格

b           匹配一个单词的分界线,比如一个空格

B          匹配一个单词的非分界线

re模块匹配规则(re.match函数的第三个参数):

re.IGNORECASE       忽略文中的大小写

re.LOCALE                  处理字符集本地化

re.MULTILINE             是否支持多行匹配

re.DOTALL                  匹配一些特殊标记,例如使用.匹配\n等字符

re.VERBOSE              忽略正则表达式中的空格或者换行等字符

re.UNICODE              使用Unicode编码

#encoding=utf-8

#-------------------------------------------------------------------------------
# Name:    模块1
# Purpose:
#
# Author:   Administrator
#
# Created:   10-06-2014
# Copyright:  (c) Administrator 2014
# Licence:   <your licence>
#-------------------------------------------------------------------------------
import re

def checklen(pwd):
  return len(pwd)>=8

def checkContainUpper(pwd):
  pattern = re.compile('[A-Z]+')
  match = pattern.findall(pwd)

  if match:
    return True
  else:
    return False

def checkContainNum(pwd):
  pattern = re.compile('[0-9]+')
  match = pattern.findall(pwd)
  if match:
    return True
  else:
    return False

def checkContainLower(pwd):
  pattern = re.compile('[a-z]+')
  match = pattern.findall(pwd)

  if match:
    return True
  else:
    return False

def checkSymbol(pwd):
  pattern = re.compile('([^a-z0-9A-Z])+')
  match = pattern.findall(pwd)

  if match:
    return True
  else:
    return False

def checkPassword(pwd):

  #判断密码长度是否合法
  lenOK=checklen(pwd)

  #判断是否包含大写字母
  upperOK=checkContainUpper(pwd)

  #判断是否包含小写字母
  lowerOK=checkContainLower(pwd)

  #判断是否包含数字
  numOK=checkContainNum(pwd)

  #判断是否包含符号
  symbolOK=checkSymbol(pwd)

  print(lenOK)
  print(upperOK)
  print(lowerOK)
  print(numOK)
  print(symbolOK)
  return (lenOK and upperOK and lowerOK and numOK and symbolOK)


def main():
  if checkPassword('Helloworld#123'):
    print('检测通过')
  else:
    print('检测未通过')


if __name__ == '__main__':
  main()

平时用正则不多,不知道怎么写一个正则满足要求,用了比较笨的办法,谁知道一句正则检验的请赐教!

我们再来看一个稍微复杂些的 检测邮箱名及密码验证

代码:

main.py

# coding=gbk 
 
import re 
 
def ProcessMail(inputMail): 
  isMatch = bool(re.match(r"^[a-zA-Z](([a-zA-Z0-9]*\.[a-zA-Z0-9]*)|[a-zA-Z0-9]*)[a-zA-Z]@([a-z0-9A-Z]+\.)+[a-zA-Z]{2,}$", inputMail,re.VERBOSE)); 
  if isMatch: 
    print ("邮箱注册成功。"); 
  else: 
    print ("邮箱注册失败。"); 
  return isMatch; 
 
def ProcessPassword(inputPassword): 
  #处理正则表达式 
  isMatch = bool(re.match(r"[a-zA-Z0-9]{8}",inputPassword,flags=0)); 
 
  #用type的三位表示数字type[0],小写字母type[1],大写字母type[2]是否都具备 
  if isMatch: 
    type = [False,False,False] 
    for i in range(0,8): 
      temp = inputPassword[i] 
      if ord(temp) >= ord('0') and ord(temp) <= ord('9'): 
        type[0] = True; 
      elif ord(temp) >= ord('a') and ord(temp) <= ord('z'): 
        type[1] = True; 
      elif ord(temp) >= ord('A') and ord(temp) <= ord('Z'): 
        type[2] = True; 
    for i in type: 
      if i is False: 
        isMatch = False; 
        break; 
   
  #处理是否有重复的字符出现 
  if isMatch: 
    for i in range(0,7):  
      temp = inputPassword[i]; 
      for j in range(i + 1,8): 
        if inputPassword[j] == temp: 
          isMatch = False; 
          break; 
   
  if isMatch: 
    print ("密码注册成功。"); 
  else: 
    print ("密码注册失败。"); 
  return isMatch; 
   
if __name__ == '__main__': 
  mailState = False; 
  while mailState is False: 
    inputMail = input("输入邮箱: "); 
    mailState = ProcessMail(inputMail); 
    print ("\n"); 
#   
  passwordState = False; 
  while passwordState is False: 
    inputPassword = input("输入密码: "); 
    passwordState = ProcessPassword(inputPassword); 
    print ("\n");

输出:

输入邮箱: a.a9@sina.com 
邮箱注册失败。 

输入邮箱: 9a.aa@sina.com 
邮箱注册失败。 

输入邮箱: a.a.a@sina.com 
邮箱注册失败。 

输入邮箱: a9999@sina.com 
邮箱注册失败。 

输入邮箱: a123.banana@..com 
邮箱注册失败。 

输入邮箱: a123.banana@a..com 
邮箱注册失败。 

输入邮箱: a123.banana@sina.c 
邮箱注册失败。 

输入邮箱: a123.banana@sina.com 
邮箱注册失败。 
 
输入邮箱: a123.banana@sina.com 
邮箱注册成功。

密码的测试也满足需求,不一一列举

Python 相关文章推荐
Python日期操作学习笔记
Oct 07 Python
Python MD5文件生成码
Jan 12 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
python中的闭包函数
Feb 09 Python
基于pip install django失败时的解决方法
Jun 12 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 #Python
Python实现控制台进度条功能
Jan 04 #Python
python实现网站的模拟登录
Jan 04 #Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 #Python
简单介绍Python中的几种数据类型
Jan 02 #Python
简单实现python爬虫功能
Dec 31 #Python
python实现颜色空间转换程序(Tkinter)
Dec 31 #Python
You might like
wamp安装后自定义配置的方法
2014/08/23 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python 爬虫模拟登陆知乎
2016/09/23 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
PyTorch-GPU加速实例
2020/06/23 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
《打电话》教学反思
2016/02/22 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Redis批量生成数据的实现
2022/06/05 Redis
Apache自带的ab压力测试工具的实现
2022/07/23 Servers