この質問はperl
としてタグ付けされた元だった、そしてそれは私がそれに答え方法です。オラクルのものについては、あなたが同じことをどうやってやるか分かりません。しかし、私はそれがそれまでに得られる前に、このことを検証しようとしていました。
これは1つの正規表現では行いません。ルールを変更する場合、新しい正規表現を作成する作業は同じ量になります。私はバックトラックをすべて許したくないので、たとえそれが利用可能であっても、このための探索法を使用しません。
これは多くのコードのようですが、問題を解決する部分は単なるサブルーチンです。それは非常に単純なパターンを持っています。パスワードルールが変更されると、パターンが追加または削除されます。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