具有至少1个大写和至少1个数字字符的密码的正则表达式?

时间:2018-04-08 21:10:13

标签: python regex

我的导师和我需要一个正则表达式的密码,要求密码至少包含1个大写字母和至少1个数字。通过文档浏览,甚至在这里我们发现如果前面,后面或中间有一个大写字母,它将匹配,但是当整个密码为大写时它会失败。我们使用的正则表达式是(?=.*[a-z])(?=.*[A-Z]).+。我们真的可以在这个问题上使用一些帮助。环境是Python3,Flask和Jinja2。

2 个答案:

答案 0 :(得分:1)

这将完成这项工作:

^(?=.*[A-Z])(?=.*\d).+$

...说明

^             start of string
(?=.*[A-Z])   at least one upper case letter exists
(?=.*\d)      at least one digit exists
.+            match all other characters
$             end of string

...加上一个简短的例子:

bool(re.match("^(?=.*[A-Z])(?=.*\d).+$", "Password1")) # true
bool(re.match("^(?=.*[A-Z])(?=.*\d).+$", "password1")) # false
bool(re.match("^(?=.*[A-Z])(?=.*\d).+$", "Password"))  # false

答案 1 :(得分:1)

你似乎不喜欢有积极前瞻的解决方案,如何:

import re

def CapitalAndNumberInText(text):
    def matches(pattern):
        return bool(re.match(pattern,text))
    return matches(r".*[A-Z].*") and matches(r".*[0-9].*")

print( CapitalAndNumberInText("Not here"))
print( CapitalAndNumberInText("not here"))
print( CapitalAndNumberInText("not 2 here"))
print( CapitalAndNumberInText("But 2 here"))

输出:

False
False
False
True

如果你的导师无法解决这个谜题,至少现在你可以提供一个解决方案......虽然one regex with lookaheads更优雅。

相关问题