fleet56
fleet56

Reputation: 3

Python Password Validation Using Special Characters - Avoiding Regex

relatively new to Python, but I haven't seen anything like this on SO just yet.

I am in the process of building a password validator in Python, I have already created several rules such as length, alphanumeric, caps, etc. The portion I am hung up on is that I need a specific special character set to check for as well. I am unsure if I just have a syntax issue, or if I am not building the code check portion, but no matter what I enter, it seems to always flag the special characters as not being in the password even if they are.

I attempted to call out the special character list as follows:

spec= "!@#$%&_="

The portion doing the work is in a series of validation checks for each item (mentioned above), for the special character check I am attempting:

elif not any(s in spec for char in s):
            print ("Password must contain a special character of !@#$%&_=")

The program runs through but hits on the special character print statement even with a valid password that should pass. I believe I am getting hung up on the elif + any in statements and the syntax is off.

NOTE: I want to avoid using regular expressions, and use the specified special character list.

Thank you in advance!

Upvotes: 0

Views: 5316

Answers (2)

Hafted
Hafted

Reputation: 13

You were on the right track. However, you need to implement the last function. Here is all the code you need.

 word = "!@#$%&&^&*"

 def true(pwd))
     global character
     return any(char in spec for char in pwd) 

 def otherthingsthatstrue(pwd):
     global character
     return len(set(character).intersection(set(pwd))) > 0

 print(true('word!')

 print(otherthingsthatstrue('word'))

Upvotes: 0

glegoux
glegoux

Reputation: 3613

Fix you replace any(s in spec for char in s) by any(char in spec for char in s).

To check if password contains at least a special character do:

special_character = "!@#$%&_="

def is_valid(pwd):
    global special_character
    return any(char in spec for char in pwd)    

def is_valid_other_method(pwd):
   global special_character
   return len(set(special_character).intersection(set(pwd))) > 0

print(is_valid('qwerty!'))
# True

print(is_valid('qwerty'))
# False

Output:

True
False

Upvotes: 1

Related Questions