2014-09-30 7 views
3

Я хочу проверить, содержит ли пароль специальные символы. Я искал несколько примеров, но не могу найти, что касается моей проблемы. Как мне это сделать? Вот как я это делаю до сих пор;проверить, содержит ли строка специальные символы в python

elif not re.match("^[[email protected]#$%^&*()_+{}":;']+$",password) 
     print "Invalid entry." 
     continue 

Моя строка - это пароль.

+3

и вы не получаете синтаксическую ошибку от этого? – MattDMo

+0

Я получаю один –

ответ

6

Вам не нужно регулярное выражение для этого. Попытка:

elif set('[[email protected]#$%^&*()_+{}":;\']+$').intersection(password): 
    print "Invalid entry." 

Кавычка была экранирована в строке. Что это значит, это создать набор, содержащий все ваши недопустимые символы, а затем пересечь его и password (другими словами, набор, содержащий все уникальные символы, которые существуют как в наборе, так и в строке пароля). Если совпадений нет, результирующий набор будет пустым и, следовательно, будет оценен как False, иначе он будет оцениваться как True и распечатать сообщение.

0

Некоторые символы в строке специальных символов имеют особое значение в регулярных выражениях и должны быть экранированы. Вы получаете синтаксическую ошибку, потому что вы включили " в середине строки, очерченной двойными кавычками, поэтому Python завершает обработку строки там, а затем задыхается от мусора, который он видит впоследствии. Попробуйте следующее:

elif not re.match(r"[~\[email protected]#\$%\^&\*\(\)_\+{}\":;'\[\]]", password): 
    print "Invalid entry" 
    continue 

Я использовал строковый строковый литерал, который вы всегда должны использовать в регулярных выражениях. Я избежал символов, которые нужно было экранировать, и немного упростил ваше выражение, так как начало ^ и конец $ строковых маркеров не нужны - как только будет выполнено одно совпадение, оно вернет True и пропустит следующее код.

В случае сомнений избегайте :)

+0

Разве вы не хотите 'elif', а не' elif not'? Похоже, вы печатаете «Недопустимая запись», если пароль НЕ соответствует регулярному выражению. – celeritas

+0

@celeritas да, это то, что вы хотите. Если совпадение работает, пароль содержит не менее 1 специального символа, и поэтому он «хорош». Если регулярное выражение соответствует паролю, значение будет 'True'. Вам нужно отказаться от этого, чтобы запустить отступы. Подумайте об этом ... – MattDMo

+0

Да, я думал, что OP хочет убедиться, что пароль НЕ содержит специальные символы. – celeritas

Смежные вопросы