python Re.search用于密码符号检查程序(密码验证)

时间:2017-11-05 17:19:18

标签: python password-checker

我正在制作一个检查密码强度的程序。密码必须包含大写字母,小写字母,允许的符号和数字。我已经能够使程序的其余部分工作(使用re.search(r'[az],密码结构)我将问题区域缩短到这几行,但无法让这部分工作。我应该使用与re.search不同的东西?

    import re
    symbols = ["!","(",")","£","^"]
    password = input("password")
    if re.search(r'[symbols]',password):
      print("ok")
    else:
      print("no")

2 个答案:

答案 0 :(得分:0)

你几乎就在那里。只需在正则表达式范围内指定所有符号:

[..]

^大多数正则表达式元字符lose their special meaning内,只需注意第一个位置的\w和字符类,如symbols = ["!", "(", ")", "£", "^"] password_valid = bool(re.search(r'[{}]'.format(''.join(symbols)), password))

如果您注意防止这些情况,您可以在列表中保留符号,并使用它:

nonmetric_label = c(paste0("Non-metric~fit~italic(R)^2 ==", nonmetric_r2),
                    paste0("Linear~fit~italic(R)^2 ==", linear_r2)) 

ggplot(tib,
       aes(x = diss, y = dist)) +
  geom_point(color = "blue") +
  geom_step(aes(x = diss, y = dhat), color = "red", direction = "vh") +
  annotate(
    geom = "text",
    x = coord_x,
    y = c(coord_y, 0.95*coord_y),
    hjust = 0,
    #vjust = 1,
    label = nonmetric_label, parse = TRUE) +
  labs(x = "Observed Dissimilarity",
       y = "Ordination Distance")

答案 1 :(得分:0)

完整的解决方案可能是这样的

import re
def is_password_valid(password):
    return bool(re.search('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[+\-*\/])(?=.*[!()£^])', password))

或更容易理解

import re
def is_password_valid(pas):
    is_ok1 = bool(re.search("[a-z]",pas))
    is_ok2 = bool(re.search("[A-Z]",pas))
    is_ok3 = bool(re.search("[0-9]",pas))
    is_ok4 = bool(re.search("[+\-*\/!()£^]",pas))        
    return is_ok1 and is_ok2 and is_ok3 and is_ok4