Как прервать if() в ф-ции?
Есть два пути:
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;
}
Вв ашем коде много лишнего и это лишнее вас запутывает.function checkLogin($str)
{
  if (!$str)
  {
    echo 'Вы не ввели имя пользователя';
    return false;
  }
  
  if (!preg_match('/^[-_.a-z\d]{4,16}$/i', $str))
  {
    echo "Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)";
    return false;
  }

  return true;
}