Telegram link converter Class

  1. Конструктор: Создается объект класса с входными данными, которые могут быть номером телефона или именем пользователя.
  2. Метод convert: Определяет тип входных данных и вызывает соответствующий метод для преобразования в ссылку Telegram.
  3. Метод convertPhoneNumber: Преобразует номер телефона в международный формат и возвращает ссылку Telegram.
  4. Метод convertUsername: Преобразует имя пользователя в правильную ссылку Telegram.
  5. Метод startsWith: Проверяет, начинается ли строка с заданной подстроки.
<?php

/**
 * Class TelegramLinkConverter
 *
 * Этот класс преобразует входные данные в правильные ссылки Telegram.
 * Входными данными могут быть номера телефонов (начинающиеся с +7 или 8) или имена пользователей (с @ или без).
 */
class TelegramLinkConverter {
    private $inputData;

    /**
     * TelegramLinkConverter constructor.
     *
     * @param string $inputData Входные данные (номер телефона или имя пользователя).
     */
    public function __construct($inputData) {
        $this->inputData = $inputData;
    }

    /**
     * Преобразует входные данные в правильную ссылку Telegram.
     *
     * @return string Правильная ссылка Telegram.
     */
    public function convert() {
        if ($this->startsWith($this->inputData, '+') || $this->startsWith($this->inputData, '8')) {
            return $this->convertPhoneNumber($this->inputData);
        } elseif ($this->startsWith($this->inputData, '@')) {
            return $this->convertUsername($this->inputData);
        } else {
            return $this->convertUsername('@' . $this->inputData);
        }
    }

    /**
     * Преобразует номер телефона в международный формат и возвращает ссылку Telegram.
     *
     * @param string $phoneNumber Номер телефона.
     * @return string Ссылка Telegram.
     */
    private function convertPhoneNumber($phoneNumber) {
        // Убираем все символы, кроме цифр
        $cleanedNumber = preg_replace('/\D/', '', $phoneNumber);

        // Если номер начинается с '8', заменяем его на '7' для международного формата
        if (strpos($cleanedNumber, '8') === 0) {
            $cleanedNumber = '7' . substr($cleanedNumber, 1);
        }

        return "https://t.me/" . $cleanedNumber;
    }

    /**
     * Преобразует имя пользователя в правильную ссылку Telegram.
     *
     * @param string $username Имя пользователя.
     * @return string Ссылка Telegram.
     */
    private function convertUsername($username) {
        return "https://t.me/" . ltrim($username, '@');
    }

    /**
     * Проверяет, начинается ли строка с заданной подстроки.
     *
     * @param string $string Строка для проверки.
     * @param string $startString Подстрока для поиска в начале строки.
     * @return bool Возвращает true, если строка начинается с заданной подстроки, иначе false.
     */
    private function startsWith($string, $startString) {
        return substr($string, 0, strlen($startString)) === $startString;
    }
}

// Примеры использования:
$converter1 = new TelegramLinkConverter("+79287776098");
echo $converter1->convert();  // Вывод: https://t.me/79287776098

$converter2 = new TelegramLinkConverter("@codeweber");
echo $converter2->convert();  // Вывод: https://t.me/codeweber

$converter3 = new TelegramLinkConverter("codeweber");
echo $converter3->convert();  // Вывод: https://t.me/codeweber

$converter4 = new TelegramLinkConverter("89287776098");
echo $converter4->convert();  // Вывод: https://t.me/79287776098
?>

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top