Есть два пути:
1. Улучшить проверку: сейчас у вас переменная
$result не определена в случае первой ошибки, что приравнивается к false. Можно проверять так:
if (isset($result) && !$result)
2. Использовать
return, это стандартный способ прерывания работы функции.
Вообще, функция не должна ничего выводить, она должна только возвращать результат.
Вот так:
function checkLogin($str) {
if (!$str) {
throw new InvalidLoginException('Вы не ввели имя пользователя');
}
$pattern='/^[-_.a-z\d]{4,16}$/i';
$result=preg_match($pattern,$str);
if (!$result) {
throw new InvalidLoginException('Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)');
}
}
try {
checkLogin("");
} catch (InvalidLoginException $e) {
echo $e->getMessage();
}
Или, на худой конец, так:
function checkLogin($str) {
if (!$str) {
return 'Вы не ввели имя пользователя';
}
if (!preg_match('/^[-_.a-z\d]{4,16}$/i',$str)) {
return 'Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)';
}
return true;
}
$status = checkLogin("");
if ($status !== true) {
echo $status;
}