Câu hỏi này đã được ban đầu được gắn thẻ như perl
, và đó là cách tôi đã trả lời nó. Đối với những thứ oracle, tôi không có ý tưởng làm thế nào bạn muốn làm điều tương tự. Tuy nhiên, tôi sẽ cố gắng xác nhận những thứ này trước khi nó đi xa đến thế.
Tôi sẽ không làm điều này trong một cụm từ thông dụng. Khi bạn quyết định thay đổi các quy tắc, bạn sẽ có cùng một lượng công việc để tạo biểu thức chính quy mới. Tôi sẽ không sử dụng giải pháp cho điều này ngay cả khi họ đã có sẵn vì tôi sẽ không muốn chịu đựng tất cả các backtracking.
Có vẻ như đó là rất nhiều mã, nhưng phần giải quyết vấn đề của bạn chỉ là chương trình con. Nó có các mẫu rất đơn giản. Khi các quy tắc mật khẩu thay đổi, bạn thêm hoặc xóa các mẫu.Nó có thể là giá trị nó để sử dụng study, nhưng tôi đã không điều tra rằng:
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();
Nguồn
2011-11-29 07:54:37
Nêu các ngôn ngữ có thể giúp đỡ, vì hỗ trợ cho các tính năng khác nhau thay đổi. – fncomp
@Josh: Câu hỏi được gắn thẻ "perl". –
@mu Có triển khai Perl không hỗ trợ giao diện không? – fncomp