HomeSoftware EngineeringTips on how to Validate Passwords with Regex in Python

Tips on how to Validate Passwords with Regex in Python


The problem

That you must write regex that may validate a password to ensure it meets the next standards:

  • Not less than six characters lengthy
  • accommodates a lowercase letter
  • accommodates an uppercase letter
  • accommodates a quantity

Legitimate passwords will solely be alphanumeric characters.

The answer in Python code

Choice 1:

from re import compile, VERBOSE

regex = compile("""
^              # start phrase
(?=.*?[a-z])   # at the least one lowercase letter
(?=.*?[A-Z])   # at the least one uppercase letter
(?=.*?[0-9])   # at the least one quantity
[A-Za-zd]     # solely alphanumeric
{6,}           # at the least 6 characters lengthy
$              # finish phrase
""", VERBOSE)

Choice 2:

import re
regex = re.compile(r"""
    (?=^[a-zA-Z0-9]{6,}$)
    (?=w*[a-z])
    (?=w*[A-Z])
    (?=w*d)
""", re.X)

Choice 3:

regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[^W_]{6,}$"

Check instances to validate our answer

from re import search
check.describe("Primary exams")
check.assert_equals(bool(search(regex, 'fjd3IR9')), True)
check.assert_equals(bool(search(regex, 'ghdfj32')), False)
check.assert_equals(bool(search(regex, 'DSJKHD23')), False)
check.assert_equals(bool(search(regex, 'dsF43')), False)
check.assert_equals(bool(search(regex, '4fdg5Fj3')), True)
check.assert_equals(bool(search(regex, 'DHSJdhjsU')), False)
check.assert_equals(bool(search(regex, 'fjd3IR9.;')), False)
check.assert_equals(bool(search(regex, 'fjd3  IR9')), False)
check.assert_equals(bool(search(regex, 'djI38D55')), True)
check.assert_equals(bool(search(regex, 'a2.d412')), False)
check.assert_equals(bool(search(regex, 'JHD5FJ53')), False)
check.assert_equals(bool(search(regex, '!fdjn345')), False)
check.assert_equals(bool(search(regex, 'jfkdfj3j')), False)
check.assert_equals(bool(search(regex, '123')), False)
check.assert_equals(bool(search(regex, 'abc')), False)
check.assert_equals(bool(search(regex, '123abcABC')), True)
check.assert_equals(bool(search(regex, 'ABC123abc')), True)
check.assert_equals(bool(search(regex, 'Password123')), True)

check.describe("Random exams")
from random import random, randint
sol=r"^(?=.*[a-z])(?=.*[A-Z])(?=.*d)[a-zA-Zd]{6,}$"
decrease="abcdefghijklmnopqrstuvwxyz"
higher="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
digits="0123456789"
all="".be a part of([lower,upper,digits])
mistaken=" !_+-?/"

for _ in vary(100):
  s="".be a part of(sorted([upper[randint(0,len(upper)-1)], decrease[randint(0,len(lower)-1)], digits[randint(0,len(digits)-1)]]+[all[randint(0,len(all)-1)] if randint(0,10) else mistaken[randint(0,len(wrong)-1)] for q in vary(randint(0,15))], key=lambda a: random()))
  check.it("Testing for "+repr(s))
  check.assert_equals(search(regex,s)!=None, search(sol,s)!=None, "It ought to work for random inputs too")
RELATED ARTICLES

Most Popular

Recent Comments