Как исправить (regex пароль) ошибку в python? - PullRequest
0 голосов
/ 27 марта 2019

Я настраиваю свой сервер и хочу иметь сложные пароли.

Используя регулярное выражение в Python, как я могу проверить, что пароль пользователя:

Не менее 8 символов

Должен быть ограничен, хотя не требует специально:

заглавные буквы: A-Z

строчные буквы: a-z

цифры: 0-9

любой из специальных символов: @ # $% ^ & + =

import re

password = raw_input("Enter string to test: ")

if re.match(r'[A-Za-z0-9@#$%^&+=]{8,}', password):

    # match
else:

    # no match

from wtforms import StringField, PasswordField, SubmitField, BooleanField

from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError


class RegistrationForm(FlaskForm):

    username = StringField('Username',
                           validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email',
                        validators=[DataRequired(), Email()])
    #password = 
    pattern = "^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$"
    password = PasswordField('Password', validators=[DataRequired(), Length(min=2, max=20)])
    if re.match(r'[A-Za-z0-9@#$%^&+=]{8,}', password):
        print ("Valid password")
    else:
        print ("Password not valid")

Я ожидаю, что вывод будет действительным или неверным паролем

1 Ответ

1 голос
/ 27 марта 2019

Регулярное выражение кажется мне немного тяжелым. Вы можете просто использовать обычные строковые операции:

from string import ascii_lowercase, digits

punctuation = '@#$%^&+='
valid_characters = ascii_lowercase + digits + punctuation

def validate_password(password):
    return len(password) >= 8 and set(password) <= set(valid_characters)
...