我試圖將這些正則表達式合併爲一個。有人知道這是可能的嗎?將正則表達式組合在一起
基本上我試圖檢查一個字符串是否有小寫字母,大寫字母和數字。
(.*[a-z]+.*)
(.*[A-Z]+.*)
(.*[0-9]+.*)
所以這些字符串,將全部通過
aA1
a1A
Aa1
A1a
1aA
1Aa
例子都將返回false
aa1
AA1
a1a
AAa
a1
1a
1AA
1A
etc..
我試圖將這些正則表達式合併爲一個。有人知道這是可能的嗎?將正則表達式組合在一起
基本上我試圖檢查一個字符串是否有小寫字母,大寫字母和數字。
(.*[a-z]+.*)
(.*[A-Z]+.*)
(.*[0-9]+.*)
所以這些字符串,將全部通過
aA1
a1A
Aa1
A1a
1aA
1Aa
例子都將返回false
aa1
AA1
a1a
AAa
a1
1a
1AA
1A
etc..
一個非常簡單的方法是枚舉所有六種組合:
[a-z][A-Z][0-9]|[a-z][0-9][A-Z]|[A-Z][a-z][0-9]|[A-Z][0-9][a-z]|[0-9][a-z][A-Z]|[0-9][A-Z][a-z]
從本質上講,你有三種類型的角色 - ü PPER,大號奧爾和d igit。這六種組合是:
LUD|LDU|ULD|UDL|DLU|DUL
正如你所看到的,這很快變得複雜。如果您是通過密碼檢查進行操作的,則使用主機語言進行字符類計數是更好的選擇。
對於「非常簡單」的某些複雜值。 ;) – Schwern
@Schwern我的意思是,這大約是直接了當:你做的是列出所有六個百選項:-) –
dasblinkenlight
是的,但它是討厭的。 (實例是在Perl)
my $re = qr{(?:
([a-z]+) |
([A-Z]+) |
([0-9]+)
)+}x;
所有$1
,$2
,並$3
必須定義(真不會削減它因爲0爲假)。
$string =~ $re;
print "Match" if defined $1 && defined $2 && defined $3;
爲了每個人的緣故,最好讓它保持在三個簡單的正則表達式並編寫子例程。
sub is_valid_string {
my $str = shift;
return 0 unless $str =~ /[a-z]/;
return 0 unless $str =~ /[A-Z]/;
return 0 unless $str =~ /[0-9]/;
return 1;
}
而「a1」會失敗?另外,你是否檢查密碼的複雜性?不要這樣做。 – Schwern
@Schwern是的,它應該返回false ...爲什麼不呢?有什麼我失蹤? –
密碼破解已經變得非常複雜,並且密碼破解的時代已經過去了,那就是密碼意味着質量。要麼使用質量密碼檢查器,要麼不要打擾。你只會增加複雜性,並惹惱編寫好密碼的人。詢問[Security.SE](https://security.stackexchange.com/)以獲取更多詳細信息。 – Schwern