Nie wykorzystuj przy czymś takim pojedynczego, skomplikowanego wyrażenia. Na pierwszy rzut oka nie wiadomo co ono w ogóle może robić, mocno też ogranicza możliwość wyłapania konkretnego błędu.
$password = 'abc';
$error = null;
if (mb_strlen($password) < 6) {
$error = '..';
} else if (mb_strlen($password) > 1000) { // na prawdę chciałeś ustalić limit długości hasła na 12 znaków? W ogóle nie ma potrzeby ograniczania maksymalnej długości, ew. powinna dawać ona spory zapas.
$error = ..
} else if (mb_strlen
(preg_replace('/[^\\Lu]/'U
, '', $password)) < 2) { // usuń z hasła wszystko co nie jest wielką literą i sprawdź długość zwróconego ciągu $error = 'hasło musi zawierać przynajmniej dwie wielkie litery';
} else if (preg_match('/\\d/', $password) === 0
) { $error = 'hasło musi zawierać cyfrę';
} else if (mb_strlen
(preg_replace('/[^\\L\\d]/'U
, '', $password)) < 1) { // usuń wszystko co nie jest literą bądź cyfrą $error = 'hasło musi zawierać znak specjalny';
}
if ($error === null) {
} else {
echo 'złe hasło: ' . $error; }
Dodanie kolejnych wymogów dla hasła jest dużo prostsze, masz konkretne komunikaty błędów, a kod jest łatwiejszy w utrzymaniu.