Categorize Password as Strong or Weak using Regex in Python
Last Updated :
28 Mar, 2023
Improve
Given a password, we have to categorize it as a strong or weak one. There are some checks that need to be met to be a strong password. For a weak password, we need to return the reason for it to be weak. Conditions to be fulfilled are:
- Minimum 9 characters and maximum 20 characters.
- Cannot be a newline or a space
- There should not be three or more repeating characters in a row.
- The same string pattern(minimum of two character length) should not be repeating.
Note: For checking the basic validations of a password, click here. Examples:
Input1 : Qggf!@ghf3 Output1 : Strong Password! Input2 : aaabnil1gu Output2 : Weak Password: Same character repeats three or more times in a row Input3 : Geeksforgeeks Output3 : Weak Password: Same character repeats three or more times in a row Input4 : Aasd!feasnm Output4 : Weak password: Same string pattern repetition Input5 : 772*hdf77 Output5 : Weak password: Same string pattern repetition Input6 : " " Output6 : Password cannot be a newline or space!
Below is the implementation.
# Categorizing password as Strong or
# Weak in Python using Regex
import re
# Function to categorize password
def password(v):
# the password should not be a
# newline or space
if v == "\n" or v == " ":
return "Password cannot be a newline or space!"
# the password length should be in
# between 9 and 20
if 9 <= len(v) <= 20:
# checks for occurrence of a character
# three or more times in a row
if re.search(r'(.)\1\1', v):
return "Weak Password: Same character repeats three or more times in a row"
# checks for occurrence of same string
# pattern( minimum of two character length)
# repeating
if re.search(r'(..)(.*?)\1', v):
return "Weak password: Same string pattern repetition"
else:
return "Strong Password!"
else:
return "Password length must be 9-20 characters!"
# Main method
def main():
# Driver code
print(password("Qggf!@ghf3"))
print(password("Gggksforgeeks"))
print(password("aaabnil1gu"))
print(password("Aasd!feasn"))
print(password("772*hd897"))
print(password(" "))
# Driver Code
if __name__ == '__main__':
main()
Output
Strong Password! Weak password: Same string pattern repetition Weak Password: Same character repeats three or more times in a row Weak password: Same string pattern repetition Strong Password! Password cannot be a newline or space!
Time Complexity: O(N) N is refers to the length of the input password string,
Auxiliary Space: O(1)