這個問題是原來的標記爲perl
,這就是我怎麼回答了。對於oracle的東西,我不知道你會怎麼做同樣的事情。不過,我會在它達到目標之前嘗試驗證這些東西。
我不會在一個正則表達式中做到這一點。當你決定改變規則時,你將有相同數量的工作來制定新的正則表達式。即使它們可用,我也不會使用這種替代方法,因爲我不想容忍所有的回溯。
這看起來好像很多代碼,但解決問題的部分只是子例程。它有非常簡單的模式。當密碼規則改變時,您添加或刪除模式。這可能是值得使用study,但我沒有調查認爲:
use v5.10;
use strict;
use Test::More;
my @valids = qw(
1foo,bar
foo,bar1
1fooobar
foooobar1
fooo11bar
);
my @invalids = qw(
fooo,bar
short
nodigitbutlong
12345678
,,,,,,,,
);
sub is_good_password {
my($password) = @_;
state $rules = [
qr/\A[A-Z0-9,._;:-]{8,}\z/i,
qr/[0-9]/,
qr/[A-Z]/i,
];
foreach my $rule (@$rules) {
return 0 unless $password =~ $rule;
}
return 1;
}
foreach my $valid (@valids) {
ok(is_good_password($valid), "Password $valid is valid");
}
foreach my $invalid (@invalids) {
ok(! is_good_password($invalid), "Password $invalid is invalid");
}
done_testing();
陳述的語言也許會有幫助,因爲對於不同功能的支持有所不同。 – fncomp
@Josh:問題被標記爲「perl」。 –
@mu是否有Perl的實現不支持預見? – fncomp