Wyrażenie regularne da się ułożyć do takiego problemu, ale będzie ono tak rozbudowane, że praktycznie szkoda zachodu się w to bawić. Ogólnie musiałbyś do wyrażenia wklepać wszystkie możliwe przypadki: (L - litera, C - cyfra; X - dowolny dozwolony znak):
LCXXXXXX...
LLCXXXXX...
LLLCXXXX...
LLLLCXXX...
LLLLLCXX...
LLLLLLCX...
LLLLLLLC...
LLLLLLLL... (i tam gdzieś C)
i w drugą stronę z zamienionymi "C" i "L". Dzieje się tak dlatego, że w wyrażeniach regularnych nie występuje pojęcie pamięci - nie jesteś w stanie ułożyć wyrażenia, które np. sprawdzi, czy ilość liter "a" równa jest ilości liter "b", natomiast w takich przypadkach jak ten, masz utrudnioną robotę, bo musisz rozpatrywać wszystkie możliwe przypadki osobno. Napisz sobie zwykły kod, który to sprawdzi i po problemie:
if(($length = strlen($pass)) >= 8
) {
$isDigit = false;
$isLetter = false;
for($i = 0; $i < $length; $i++)
{
{
$isDigit = true;
}
{
$isLetter = true;
}
else
{
}
}
if(!$isDigit || !$isLetter)
{
}
}