菜鸟使用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 提取文件的小程序
Jul 29 Python
java直接调用python脚本的例子
Feb 16 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Python标准库笔记struct模块的使用
Feb 22 Python
Python列表解析配合if else的方法
Jun 23 Python
Python实现的特征提取操作示例
Dec 03 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
对django后台admin下拉框进行过滤的实例
Jul 26 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
python实现udp聊天窗口
Mar 31 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过滤危险html代码
2008/08/18 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
Python中super的用法实例
2015/05/28 Python
深入理解python函数递归和生成器
2016/06/06 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python3多线程操作简单示例
2018/05/22 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python logging模块handlers用法详解
2020/08/14 Python
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
中国旅游网站:同程旅游
2016/09/11 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
《植物妈妈有办法》教学反思
2014/02/25 职场文书
抽样调查项目计划书
2014/04/24 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
工作会议简报
2015/07/20 职场文书
婚礼父母致辞
2015/07/28 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书