菜鸟使用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模拟登陆类
Mar 29 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
Python实现计算最小编辑距离
Mar 17 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
python验证码识别的实例详解
Sep 09 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
mac使用python识别图形验证码功能
Jan 10 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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
利用PHP动态生成VRML网页
2006/10/09 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
详解django模板与vue.js冲突问题
2019/07/07 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
python3大文件解压和基本操作
2017/12/15 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
彻底解决Python包下载慢问题
2020/11/15 Python
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
美术师范毕业生自荐信
2013/11/16 职场文书
暑期培训班招生方案
2014/08/26 职场文书
八一建军节演讲稿
2014/09/10 职场文书
2014年除四害工作总结
2014/12/06 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android