Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式:密码必须至少包含一个大写字母和数字_Python_Regex_Flask - Fatal编程技术网

Python正则表达式:密码必须至少包含一个大写字母和数字

Python正则表达式:密码必须至少包含一个大写字母和数字,python,regex,flask,Python,Regex,Flask,我正在使用Python和Flask对密码进行表单验证。密码需要至少包含一个大写字母和一个数字 我目前的尝试失败了 re.compile(r'^[A-Z\d]$') 我们可以使用模式'\d.[A-Z]|[A-Z].*\d'来搜索至少有一个大写字母和一个数字的条目。从逻辑上讲,只有两种方式可以在字符串中显示大写字母和数字。要么字母在前,数字在后,要么数字在前,字母在后 管道|表示“或”,因此我们将分别查看每一侧\d.[A-Z]匹配后跟大写字母的数字,[A-Z].\d匹配后跟数字的任何大写字母 wo

我正在使用Python和Flask对密码进行表单验证。密码需要至少包含一个大写字母和一个数字

我目前的尝试失败了

re.compile(r'^[A-Z\d]$')

我们可以使用模式
'\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
words=['Password1'、'password2'、'passwordthree'、'P4'、'mypassworD1!!!'、'898*(*^$^@%&#abcdef']
对于x,大写:
打印重新搜索('\d.*[A-Z]|[A-Z].*\d',x)
#
#没有
#没有
#
#
#没有

正则表达式没有AND运算符,因此编写与有效密码匹配的正则表达式非常困难,因为有效性是由某物、某物和其他某物定义的

但是,正则表达式确实有OR运算符,所以只要应用DeMorgan定理,并编写一个匹配无效密码的正则表达式:

任何没有数字或没有大写字母的东西

因此:


如果有任何内容与此匹配,则该密码无效。

另一个选项是使用密码


^
开始处的先行检查检查
[A-Z]
是否在前面。如果在前面,则检查是否与数字匹配。

要与至少包含一个数字字符的字符串匹配,请使用:

.*[0-9].*
类似的正则表达式适用于检查大小写。

我认为它可以工作
^(?=[A-Z])(?=.\d)。*$

'\d.[A-Z]|[A-Z].*\d'
@Pierrelaffortune您介意解释一下您的正则表达式吗?它有效我想…@Pierrelaffortune实际上,它不起作用。它有效。我刚刚测试了20个不同的字符串。您可以对密码施加的最重要要求是最小长度。星号将匹配0个或更多字符…因此删除它。也可以像这样做[^0-9A-Z]@repzero,不,这是不正确的。我的正则表达式匹配“1”和“A”.你没有注意到这是为了匹配字符串,而不是在字符串中搜索,如果这对你的想法有影响的话,直到不得不争论,但我放了锚,以明确你应该匹配整个字符串re是正确的。也许你应该强调这re是匹配无效密码-你是不公平的y dv,因为这可能不清楚。发布了很多答案后,你无法承受“我认为”。要么有效,要么无效。如果无效,请不要发布,因为答案应该实质性地增加一些内容,以便我们可以从中学习。评论结束。谢谢!简单易读
^(?=.*?[A-Z]).*\d
.*[0-9].*