我正在使用Python和Flask進行密碼的表單驗證。密碼至少需要包含一個大寫字母和至少一個數字。Python正則表達式:密碼必須包含至少一個大寫字母和數字
我現在失敗的嘗試......
re.compile(r'^[A-Z\d]$')
我正在使用Python和Flask進行密碼的表單驗證。密碼至少需要包含一個大寫字母和至少一個數字。Python正則表達式:密碼必須包含至少一個大寫字母和數字
我現在失敗的嘗試......
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
正則表達式沒有AND運算符,所以它是相當困難的編寫符合有效密碼,當有效期由東西,別的東西別的東西定義的正則表達式。
但是,正則表達式確實有一個或運營商,因此只是採用德摩根定理,並編寫匹配無效密碼正則表達式:
任何東西,沒有數字或沒有大寫
所以任何東西:
^([^0-9]*|[^A-Z]*)$
如果有任何匹配,那麼它是一個無效的密碼。
星號將匹配0或更多的字符...因此刪除它..也可以這樣做[^ 0-9A-Z] – repzero
@repzero,這是不正確的。我的正則表達式匹配「1」和「A」。你的不是 –
請注意,它是*匹配*字符串,而不是*搜索*在字符串中,如果這對你想象中的任何事物有所影響 –
要匹配與包含至少一個數字字符,使用字符串:
.*[0-9].*
類似的正則表達式應用到檢查/小寫。
''\ d。* [A-Z] | [A-Z]。* \'d' –
@PierreLafortune您介意解釋您的正則表達式嗎?它的作品,我認爲... –
@PierreLafortune其實,它不工作。 –