using UnityEngine; using static System.String; namespace RR.Common.Utility { /// /// Утилитарный класс для работы с номерами телефонов. /// Предоставляет методы для валидации и форматирования телефонных номеров. /// public static class PhoneNumberUtils { /// /// Валидирует номер телефона и возвращает только цифры без кода страны. /// Поддерживает российские номера, начинающиеся с 7 или 8. /// /// Исходный номер телефона в любом формате (может содержать пробелы, дефисы и другие символы). /// /// Строка из 10 цифр, представляющая номер без кода страны. /// Возвращает пустую строку, если формат номера неверный. /// /// /// Принимаемые форматы: /// - 11 цифр, начинающиеся с 7 или 8 (например, 89001234567 или 79001234567) /// - 10 цифр без кода страны (например, 9001234567) /// При неверном формате выводится предупреждение в консоль Unity. /// public static string ValidatePhoneNumber(string number) { // Оставляем только цифры string digitsOnly = System.Text.RegularExpressions.Regex.Replace(number, @"\D", ""); // Проверяем формат if ((digitsOnly.StartsWith("8") || digitsOnly.StartsWith("7")) && digitsOnly.Length == 11) { return digitsOnly[1..]; } if (digitsOnly.Length == 10) { return digitsOnly; } else { // Неверный формат, возвращаем номер по умолчанию Debug.LogWarning($"Неверный формат номера телефона: {number}. Заменяю на номер по умолчанию."); return Empty; } } /// /// Применяет маску форматирования к номеру телефона. /// /// Номер телефона для форматирования. /// Маска форматирования. По умолчанию "+7XXXXXXXXXX". /// Символ-заполнитель в маске, который будет заменен на цифры. По умолчанию 'X'. /// /// Отформатированный номер телефона согласно маске. /// Если номер невалиден, возвращается пустая строка. /// /// /// Метод сначала валидирует номер с помощью ValidatePhoneNumber, затем применяет маску. /// Символы маски, не являющиеся заполнителями, остаются без изменений. /// /// /// ApplyPhoneMask("89001234567", "+7 (XXX) XXX-XX-XX") вернет "+7 (900) 123-45-67" /// public static string ApplyPhoneMask(string number, string mask = "+7XXXXXXXXXX", char maskPlaceholder = 'X') { string digitsOnly = ValidatePhoneNumber(number); if (IsNullOrEmpty(digitsOnly)) return Empty; char[] maskedNumber = mask.ToCharArray(); int digitIndex = 0; for (int i = 0; i < maskedNumber.Length; i++) { if (maskedNumber[i] != maskPlaceholder || digitIndex >= digitsOnly.Length) continue; maskedNumber[i] = digitsOnly[digitIndex]; digitIndex++; } return new string(maskedNumber); } } }