how to check if a string fullfil with multiple regex and capture that portion that match?

后端 未结 1 1389
遥遥无期
遥遥无期 2021-01-23 07:35

What I want

I\'m working with a django form and it takes a password input. I need to pass the input value for multiple regexes, which will

相关标签:
1条回答
  • 2021-01-23 07:55

    While you can use a regex here, I would stick to normal Python:

    from string import ascii_uppercase, ascii_lowercase, digits, punctuation
    from pprint import pprint
    
    character_classes = {'lowercase letter': ascii_lowercase,
                         'uppercase letter': ascii_uppercase,
                         'number': digits,
                         'special character': punctuation  # change this if your idea of "special" characters is different
                        }
    
    minimum_length = 8
    
    def check_password(password):
        long_enough = len(password) >= minimum_length
        if not long_enough:
            print(f'Your password needs to be at least {minimum_length} characters long!')
        result = [{class_name: char in char_class for class_name, char_class in character_classes.items()} for char in password]
        result_transposed = {class_name: [row[class_name] for row in result] for class_name in character_classes}
        for char_class, values in result_transposed.items():
            if not any(values):
                # Instead of a print, you should raise a ValidationError here
                print(f'Your password needs to have at least one {char_class}!')
    
        return result_transposed                      
    
    check_password('12j3dSe')
    

    Output:

    Your password needs to be at least 8 characters long!
    Your password needs to have at least one special character!
    

    This allows you to modify the password requirements in a more flexible fashion, and in case you ever want to say "you need X of this character class"...

    0 讨论(0)
提交回复
热议问题