Как проверить и посмотреть, содержит ли вход специальные символы в Python? - PullRequest
0 голосов
/ 02 апреля 2020

Я школьный программист, в настоящее время пишу код на Python, чтобы улучшить свои навыки программирования, и создаю базовую страницу регистрации c. Я хочу, чтобы мой код предупреждал пользователя, если его ввод для имени пользователя или пароля неверен, но все ответы, которые я видел до сих пор, не очень полезны. Я обнаружил, что «^ [a-zA-Z0-9] * $» наиболее полезен для обнаружения специальных символов, таких как звездочки и точки, но, похоже, он работает только тогда, когда пользователь использует вместо этого все символы, указанные выше. из тех, которые находятся в диапазоне символов, которые удовлетворяют требованию. Я покажу свой код ниже:

 while not chosen_user:
     chosen_user = input("""Enter the username that you would like. Please keep it between 6 and 15 
     characters. Do not use special characters such as '&', '@', or '!' in your username. Underscores are allowed.\n>""")
    if (len(chosen_user) >= 6 or len(chosen_user) <= 15) and "^[a-zA-Z0-9_]*$" in chosen_user:
        chosen_user = True
        usernames_passwords[chosen_user] = ''
    else:
        print('Username does not meet the requirements. Please try again.')
        chosen_user = False
 while not chosen_pass:
     chosen_pass = input("""Enter a password that contains no special characters. Password must be at 
        least 6 characters.\n>""")
        if len(chosen_pass) >= 6 and "^[a-zA-Z0-9]*$" in chosen_pass:
            chosen_pass = True
            usernames_passwords[chosen_user] = chosen_pass
        else:
            print('Password is invalid. Please try again.')
            chosen_pass = False

Я не могу понять, как получить пароль, одобренный, используя только некоторые символов, и я боролся некоторое время. Любая помощь будет хорошей.

** Также учтите, что я учусь в старшей школе и предпочел бы сохранить этот код как можно более простым. Импорт в порядке, но я хотел бы понять, как и когда использовать эти вещи для будущего использования. Спасибо !!

Ответы [ 3 ]

1 голос
/ 02 апреля 2020

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

import re

chosen_user = input("""Enter the ... allowed.\n>""")
while not re.match(r"^\w{6,15}$", chosen_user, flags=re.ASCII):
    chosen_user = input('Username does not meet the requirements. Please try again.')

chosen_pass = input("""Enter a password ... least 6 characters.\n>""")
while not re.match(r"^[a-zA_Z]{6,}$", chosen_pass):
    chosen_pass = input('Password is invalid. Please try again.')

Вы найдете в re документах :

"^"
(Caret.) Соответствует началу строки, а в режиме MULTILINE также совпадает сразу после каждой новой строки.

"$"
Соответствует концу строки [...].

"\w"
Соответствует символам слова Unicode; это включает в себя большинство символов, которые могут быть частью слова на любом языке, а также цифры и подчеркивание. Если используется флаг ASCII, сопоставляется только [a-zA-Z0-9_].

"{m,n}"
Заставляет результирующее RE совпадать от m до n повторений предыдущий RE, пытаясь сопоставить как можно больше повторений. Например, {3,5} будет соответствовать от 3 до 5 символов 'a'. Пропуск m указывает нижнюю границу нуля, а пропуск n указывает бесконечную верхнюю границу.

1 голос
/ 02 апреля 2020

Попробуйте это:

import re #--> import regular expressions module

while not chosen_user:
    chosen_user = input("""Enter the username that you would like. Please keep it between 6 and 15
    characters. Do not use special characters such as '&', '@', or '!' in your username. Underscores are allowed.\n>""")
    if (len(chosen_user) >= 6 and len(chosen_user) <= 15) and re.search(r"^[A-Za-z0-9_]+$", chosen_user):
        chosen_user = True
        usernames_passwords[chosen_user] = ''
    else:
        print('Username does not meet the requirements. Please try again.')
        chosen_user = False

while not chosen_pass:
    chosen_pass = input("""Enter a password that contains no special characters. Password must be at 
    least 6 characters.\n>""")
    if len(chosen_pass) >= 6 and re.search(r"^[A-Za-z0-9_]+$", chosen_pass):
        chosen_pass = True
        usernames_passwords[chosen_user] = chosen_pass
    else:
        print('Password is invalid. Please try again.')
        chosen_pass = False
0 голосов
/ 02 апреля 2020
 while not chosen_user:
     chosen_user = input("""Enter the username that you would like. Please keep it between 6 and 15 
     characters. Do not use special characters such as '&', '@', or '!' in your username. Underscores are allowed.\n>""")
    if (len(chosen_user) >= 6 or len(chosen_user) <= 15) and "^[a-zA-Z0-9_]*$" in chosen_user:
        chosen_user = True
        usernames_passwords[chosen_user] = ''
    else:
        print('Username does not meet the requirements. Please try again.')
        chosen_user = False
 while not chosen_pass:
     pas = input("""Enter a password that contains no special characters. Password must be at 
        least 6 characters.\n>""")
        schar="@_!#$%^&*()<>?/\|}{~:]"
        if len(pas)>=6:
           for i in pas:
               if i in schar:
                   choosen_pass=True
                   break
            usernames_passwords[chosen_user] = chosen_pass
        else:
            print('Password is invalid. Please try again.')
            chosen_pass = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...