Необходимо ввести регистрацию с таким паролем, чтобы было не меньше 4-х
букв и цифр и все вперемешку. Программа такая:
#!/usr/bin/perl -w
use strict;
my @attempts = qw(a1s2d3f4 1234abcd 123abcdef no123good t78903h
t78903hg t78903hgf t78j903hgf);
foreach my $attempt (@attempts)
{
if ($attempt =~/^(?=(?:\D*\d){4})(?=(?:[^a-zA-Z]*[a-zA-Z]){4})[^\W_]+$/)
{
print "$attempt matched\n";
}
}
программа напечатает:
a1s2d3f4 matched
1234abcd matched
t78903hgf matched
t78j903hgf matched
Соответственно регулярное выражение работает примерно так:
(?=(?:\D*\d){4}) обеспечивает нахождение не менее 4-х цифр, используя заглядывание вперед.
(?=(?:[^a-zA-Z]*[a-zA-Z]){4}) обеспечивает нахождение 4-х букв.
^ и [^\W_]+$ находит только бквы и цифры. Специальные значки, например +, рассматриваться не будут. Можно ввести ограничение по длинне, например {8,16}. Регулярное выражение возвращает либо истину, либо ложь, соответственно на этом условии и работает программа.