In PHP è semplice verificare che una password contenga un numero minimo di caratteri speciali.
La soluzione è la seguente:
function has_min_special_chars($pwd, $min = 3) {
$pattern = "/[-!$%^&*(){}<>[\]'" . '"|#@:;.,?+=_\/\~]/';
$found = preg_match_all($pattern, $pwd, $matches);
return ($found >= $min);
}