#! python
#STRONG PASSWORD PROGRAM
import re, pyperclip
pw_compare_lower=re.compile(r'[a-z]')
pw_compare_upper=re.compile(r'[A-Z]')
pw_compare_digit=re.compile(r'[0-9]')
gr=str(input())
def Checker(gr):
if len(gr)<8:
return 0
if pw_compare_lower.search(gr)==None:
return 0
if pw_compare_upper.search(gr)==None:
return 0
if pw_compare_digit.search(gr)==None:
return 0
return 1
if (Checker(gr))==1:
print("Strong Password")
elif (Checker(gr))==0:
print("Weak Password")
有没有一种方法可以在一行中编写三个pw_compare_digit,pw_compare_upper,pw_compare_lower函数以形成一个正则表达式。
条件如下:
强密码定义为位于 至少八个字符,包含大写和小写字符,并且至少一位数字
答案 0 :(得分:2)
是的,先行
^(?=[^a-z\n]*[a-z])(?=[^A-Z\n]*[A-Z])(?=[^\d]*\d).{8,}$
import re, pyperclip
rx = re.compile(r'^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,}$')
if rx.match(your_string_here):
# pass
答案 1 :(得分:1)
我想指出的是,您也可以不使用正则表达式也可以实现此目标,以下代码将检查gr的长度是否至少为八个字符,是否包含大写和小写字符以及至少一位数字:
def Checker(gr):
return len(gr)>=8 and any([i.islower() for i in gr]) and any([i.isupper() for i in gr]) and any([i.isdigit() for i in gr])
请注意,如果要使用True
或False
,则此返回0
或1
只需将整个返回值放入int()
中。