客户系统升级,要求用户密码符合一定的规则,即:包含大小写字母、数字、符号,长度不小于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:

#-------------------------------------------------------------------------------

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实现正则检测密码合法性相关推荐

  1. python判断密码是否正确_第一个python程序-判断登陆用户名和密码是否正确

    #setencoding=utf-8#用户名和密码输入正确,则登陆成功 #用户名正确密码错误,只再输入密码,有3次机会 #错误3次,则把用户名放入lock中 import os,sys #存放用户名和 ...

  2. python调用有道词典_菜鸟上手Python最有野心的库Asyncio

    Asyncio是Python中非常牛逼的一个异步并发库,比较复杂不太好理解!从Py3.4之后开始加入这个内置并发库,一举解决了Python中高并发的问题.它提供了一整套异步IO模型的编程接口,可以说它 ...

  3. python wx窗口无法关闭_菜鸟学Python,双手奉上老司机给上路新手总结的Python实战问题…...

    针对Python这一话题每天后台都会有不少小伙伴提出问题,下面我就将这些问题进行汇整,产出"Python实战问题篇",我认为这些问题非常具有代表性,希望可以帮到大家. 第一类问题: ...

  4. python天气查询运行过程_菜鸟玩Python|制作天气查询软件

    原标题:菜鸟玩Python|制作天气查询软件 开发环境 Python3 PyQt5 requests 准备工作 首先要获取不同城市对应的天气代码,可以从 https://www.heweather.c ...

  5. python的设计理念和应用_菜鸟爱Python第1期:Python发展史?对Python最深刻的解读...

    这是胜天半子的第1篇原创. 前言 也许你不是一名程序员,也许你甚至都不是做IT行业的,但你的定位只要不是被时代所抛弃的老年人,你,多多少少应该听过"Python"一词,多多少少看到 ...

  6. python网络运维书籍_菜鸟级python自学者的python网络运维尝试

    关于换批量cisco nexus的主机名,关键字段如下(python 2.7): first_character = output.rfind("\n") + 2 last_cha ...

  7. python判断哪个数最小_怎么用python比较三个数大小

    大部分初学编程的人来说刚开始都会练习判断两个数或者三个数的大小,来熟悉某种语言的特性和最基本的if,else循环,当我们学习了更高级的语法知识后,又会有不同的实现方式,比如依次接收用户输入的3个数,排 ...

  8. 菜鸟学python小助手不能添加_菜鸟学Python 安装教程和常见问题

    Anaconda 安装链接及教程 (强烈建议把此文档看到最后再下手装!!) 一.什么是 python python 是一门解释性语言,语法简单,有大量的扩展包,如处理图像,爬取网页等等.(需安装 py ...

  9. python判断素数的函数_如何用python求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  10. python经典类新式类_菜鸟世界 -python进阶---新式类与经典类

    1.什么是新式类,什么是经典类 #coding=utf-8 class A: pass class B(object): pass A是经典类,B是新式类,这是Python2.x 里所特有的现象,之所 ...

最新文章

  1. 设计模式C#描述——单例与多例模式
  2. 缺陷大扫除(Bug Bash)
  3. python【数据结构与算法】最小生成树之Kruskal算法
  4. c语言fopen函数打不开,[讨论]用fopen函数无法打开文件有哪几种情况
  5. [渝粤教育] 西南科技大学 建筑制图 在线考试复习资料(1)
  6. 西门子数控面板图解_学好四要点让你迅速成为数控机床“操作高手”
  7. a8处理器相当于骁龙几_天玑700处理器怎么样 天玑700相当于骁龙多少_CPU_硬件教程...
  8. python求第n个质数_找到第n个质数:麻木
  9. 设计模式(五):命令模式
  10. 3.2 语音识别概述
  11. PHP佳音高清图片上传下载源码
  12. c需要简单编程语言,教你C 语言简单编程速成
  13. Python整理PEER所下载的地震波源数据——提取地震波至txt+生成地震波反应谱
  14. SEM和SEO的区别?哪个更好
  15. java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled
  16. MYSQL的开题报告题目,开题报告的选题意义.docx
  17. 2020年6月TIOBE编程语言排名公布
  18. Intel桌面CPU系列
  19. Web服务器性能测试介绍
  20. C语言之指针知识大总结

热门文章

  1. 4一20ma电流有源与无源区别_一文读懂有源信号、无源信号、干接点、湿接点
  2. k8s api文档 调用heapster metrics
  3. vue全局组件中再创建多个组件
  4. javascript 函数的变量与作用域
  5. 统一Retrofit失败的处理情况
  6. 物件捆绑 背包问题 动态规划 求解
  7. delphi之鼠标模拟
  8. iptables模块功能中文介绍
  9. ECS查询特权接口DescribeAccountAttributes发布
  10. 数组的循环及跌送方式