检查整数,大写和小写的密码输入?

时间:2014-10-15 15:45:52

标签: python

我正在为学校的计算课做一些工作,我们需要输入密码。输入需要介于6到12个字符之间,并且包含大写,小写和数字。到目前为止我有这个:

import sys
import os
def checkPass():
    passLoop = True
    while passLoop:
        print("Welcome user!")
        x = len(input("Please enter your password, between 6 and 12 characters. "))
        if x < 6:
            print("Your password is too short")
            r = input("Please press any key to restart the program")
        elif x > 12:
            print("Your password is too long")
            r = input("Please press any key to restart the program")
        else:
            print("Thank you for entering your password.")
            print("Your password is strong. Thank you for entering!")
            passLoop = False

checkPass()

我需要你的帮助来检查大写,小写和整数。我只是年轻,所以请不要太苛刻!

3 个答案:

答案 0 :(得分:2)

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d).{6,12}$

你可以试试这个。这个用re

您可以像

一样使用它
import re
if re.match(r"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d).{6,12}$",pass,re.M):
        print "valid"
else:
        print "invalid"

参见演示。

http://regex101.com/r/dZ1vT6/28

答案 1 :(得分:0)

any功能与地图结合可能会有所帮助。 map函数迭代给定字符串的所有字符,并通过给定的lambda函数进行测试(如果字符是大写字母)。由map函数

中的第一个true返回的任何函数都会使用它
 >>> any(map(lambda a:a.isupper(),"aba"))
 False
 >>> any(map(lambda a:a.isupper(),"aBa"))
 True

你可以把它包装成一个单独的函数,比如

>>> def test(passwd,func):
        return any(map(func,passwd))

>>> test("aBa",str.isupper)
    True
>>> test("ab0",str.isdigit)
    True
>>> test("aBa",str.islower)
    True

答案 2 :(得分:0)

我们假设您将密码存储在名为passwd的变量中。 然后我们可以采用您的文字要求并为它们编写检查:

输入需要介于6到12个字符之间

if not 6 <= len(passwd) <= 12: ...

并包含大写,

if not any(c.isupper() for c in passwd): ...

小写

if not any(c.islower() for c in passwd): ...

及其中的数字。

if not any(c.isdigit() for c in passwd): ...

旁注:你真的不应该限制密码的长度。