Проверка пароля на определенное число букв или цифр

Необходимо ввести регистрацию с таким паролем, чтобы было не меньше 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}. Регулярное выражение возвращает либо истину, либо ложь, соответственно на этом условии и работает программа. Архив документации OpenNet.ru / Раздел "Perl" / Индекс



Архив документации на OpenNet.ru