Python Regex: пароль должен содержать хотя бы одну заглавную букву и число
4 ответов
мы можем использовать шаблон '\d.*[A-Z]|[A-Z].*\d'
для поиска записей, имеющих хотя бы одну заглавную букву и одно число. Логически говоря, есть только два способа, которыми заглавная буква и число могут отображаться в строке. Либо письмо приходит первым, а число после, либо число первым и буква после.
труба | означает "или", Поэтому мы рассмотрим каждую сторону отдельно. \d.*[A-Z]
соответствует номеру, за которым следует заглавная буква,[A-Z].*\d
соответствует любой заглавной букве за этим следует число.
words = ['Password1', 'password2', 'passwordthree', 'P4', 'mypassworD1!!!', '898*(*^$^@%&#abcdef']
for x in words:
print re.search('\d.*[A-Z]|[A-Z].*\d', x)
#<_sre.SRE_Match object at 0x00000000088146B0>
#None
#None
#<_sre.SRE_Match object at 0x00000000088146B0>
#<_sre.SRE_Match object at 0x00000000088146B0>
#None
другой вариант-использовать lookahead.
^(?=.*?[A-Z]).*\d
посмотреть демо на regex101
lookahead на ^
start проверяет, если [A-Z]
впереди. Если это соответствует цифре.
регулярные выражения не имеют оператора AND, поэтому довольно сложно написать регулярное выражение, которое соответствует действительным паролям, когда действительность определяется чем-то и чем-то еще и чем-то еще.
но регулярные выражения имеют оператор OR, поэтому просто примените теорему деморгана и напишите регулярное выражение, которое соответствует недопустимым паролям:
ничего без номеров или ничего без заглавных
Так:
^([^0-9]*|[^A-Z]*)$
если что-нибудь соответствует этому, тогда это неверный пароль.
чтобы соответствовать строке, содержащей по крайней мере один символ цифры, используйте:
.*[0-9].*
аналогичное регулярное выражение применяется для проверки верхнего / нижнего регистра.