Validation of a Password - Python

前端 未结 11 1951
自闭症患者
自闭症患者 2020-11-27 08:20

So I have to create code that validate whether a password:

  • Is at least 8 characters long
  • Contains at least 1 number
  • Contains at least 1
相关标签:
11条回答
  • 2020-11-27 08:40
    ''' Minimum length is 5;
     - Maximum length is 10;
     - Should contain at least one number;
     - Should contain at least one special character (such as &, +, @, $, #, %, etc.);
     - Should not contain spaces.
    '''
    
    import string
    
    def checkPassword(inputStr):
        if not len(inputStr):
            print("Empty string was entered!")
            exit(0)
    
        else:
            print("Input:","\"",inputStr,"\"")
    
        if len(inputStr) < 5 or len(inputStr) > 10:
            return False
    
        countLetters = 0
        countDigits = 0
        countSpec = 0
        countWS = 0
    
        for i in inputStr:
            if i in string.ascii_uppercase or i in string.ascii_lowercase:
                 countLetters += 1
            if i in string.digits:
                countDigits += 1
            if i in string.punctuation:
                countSpec += 1
            if i in string.whitespace:
                countWS += 1
    
        if not countLetters:
            return False
        elif not countDigits:
            return False
        elif not countSpec:
            return False
        elif countWS:
            return False
        else:
            return True
    
    
    print("Output: ",checkPassword(input()))
    

    With Regex

    s = input("INPUT: ")
    print("{}\n{}".format(s, 5 <= len(s) <= 10 and any(l in "0123456789" for l in s) and any(l in "!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~" for l in s) and not " " in s))
    

    Module import

    from string import digits, punctuation
    
    def validate_password(p):
        if not 5 <= len(p) <= 10:
            return False
    
        if not any(c in digits for c in p):
            return False
    
        if not any(c in punctuation for c in p):
            return False
    
        if ' ' in p:
            return False
    
        return True
    
    for p in ('DJjkdklkl', 'John Doe'
    , '$kldfjfd9'):
        print(p, ': ', ('invalid', 'valid')[validate_password(p)], sep='')
    
    0 讨论(0)
  • 2020-11-27 08:41

    password.isdigit() does not check if the password contains a digit, it checks all the characters according to:

    str.isdigit(): Return true if all characters in the string are digits and there is at least one character, false otherwise.

    password.isupper() does not check if the password has a capital in it, it checks all the characters according to:

    str.isupper(): Return true if all cased characters in the string are uppercase and there is at least one cased character, false otherwise.

    For a solution, please check the question and accepted answer at check if a string contains a number.

    You can build your own hasNumbers()-function (Copied from linked question):

    def hasNumbers(inputString):
        return any(char.isdigit() for char in inputString)
    

    and a hasUpper()-function:

    def hasUpper(inputString):
        return any(char.isupper() for char in inputString)
    
    0 讨论(0)
  • 2020-11-27 08:43

    Maybe you can use regex expression:

    re.search(r"[A-Z]", password)
    

    Check uppercase letters.

    re.search(r"[0-9]", password)
    

    Check digits in password.

    0 讨论(0)
  • 2020-11-27 08:48

    Or you can use this to check if it got at least one digit:

    min(passwd).isdigit()
    
    0 讨论(0)
  • 2020-11-27 08:50
    uppercase_letter = ['A', 'B','C', 'D','E','F','G','H','I','J','K','L','M','N','O',
                'P','Q','R','S','T','U','V','W','X','Y','Z']
    
    number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    
    import re
    
    info ={}
    
    while True:
    
        user_name = input('write your username: ')
    
        if len(user_name) > 15:
            print('username is too long(must be less than 16 character)')
        elif len(user_name) < 3 :
            print('username is short(must be more than 2 character)')
        else:
            print('your username is', user_name)
            break
    
    
    while True:   
    
        password= input('write your password: ')
    
        if len(password) < 8 :
            print('password is short(must be more than 7 character)')
    
        elif len(password) > 20:
            print('password is too long(must be less than 21 character)') 
    
        elif re.search(str(uppercase_letter), password ) is None :
            print('Make sure your password has at least one uppercase letter in it')
    
        elif re.search(str(number), password) is None :
            print('Make sure your password has at least number in it')
    
        else:
            print('your password is', password)
            break
    
    info['user name'] = user_name
    
    info['password'] = password
    
    print(info)
    
    0 讨论(0)
提交回复
热议问题