菜鳥使用python實現正則檢測密碼合法性

來源:互聯網
上載者:User
客戶系統升級,要求使用者密碼符合一定的規則,即:包含大小寫字母、數字、符號,長度不小於8,於是先用python寫了個簡單的測試程式:

在寫解決方案前,列一下

pythonRegex中的特殊字元:

^ 表示匹配的字元必須在最前邊

$ 表示匹配的字元必須在最後邊

* 匹配* 前面的字元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 忽略Regex中的空格或者換行等字元

re.UNICODE 使用Unicode編碼

#encoding=utf-8#-------------------------------------------------------------------------------# Name:    模組1# Purpose:## Author:   Administrator## Created:   10-06-2014# Copyright:  (c) Administrator 2014# Licence:   #-------------------------------------------------------------------------------import redef checklen(pwd):  return len(pwd)>=8def checkContainUpper(pwd):  pattern = re.compile('[A-Z]+')  match = pattern.findall(pwd)  if match:    return True  else:    return Falsedef checkContainNum(pwd):  pattern = re.compile('[0-9]+')  match = pattern.findall(pwd)  if match:    return True  else:    return Falsedef checkContainLower(pwd):  pattern = re.compile('[a-z]+')  match = pattern.findall(pwd)  if match:    return True  else:    return Falsedef checkSymbol(pwd):  pattern = re.compile('([^a-z0-9A-Z])+')  match = pattern.findall(pwd)  if match:    return True  else:    return Falsedef 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):   #處理Regex   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 郵箱註冊成功。 

密碼的測試也滿足需求,不一一列舉

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.