DamiRocK

Python: сборка строки и удаление разделителей из телефонного номера

Посимвольно исключаем пробел, скобки и дефис, сохраняя остальные символы. Различаем очистку формата и проверку действительности телефонного номера.

Накопитель для текста

При сборке новой строки можно начать с пустого значения и добавлять только выбранные символы. Пустая строка — нейтральный элемент конкатенации: "" + "abc" даёт "abc".

Задание источника

Удалите из телефонной строки обычные пробелы, круглые скобки и дефисы:

def sanitize_phone_number(phone: str) -> str:
    i = 0
    result = ""
    while i < len(phone):
        char = phone[i]
        if char not in " ()-":
            result += char
        i += 1
    return result

Проверка

Учебная строка "+7 (999) 123-45-67" превращается в "+79991234567". "8 800 555 35 35" — в "88005553535", "(123) 456-7890" — в "1234567890".

Символ плюс не включён в исключаемый набор и остаётся. Порядок всех сохранённых символов также не меняется.

Точное множество исключений

Решение убирает четыре вида символов, перечисленных в строке " ()-". Оно не удаляет автоматически табуляцию, неразрывный пробел, длинное тире или буквы. Например, буквенный фрагмент останется в результате, хотя полноценный валидатор номера мог бы отклонить такой ввод.

Не проверка номера

Функция нормализует только часть оформления. Она не определяет страну, длину, допустимость номера или возможность звонка. Удаление символов и содержательная валидация — разные этапы, которые не следует смешивать под одним обещанием «очистить всё».

Для больших строк многократная конкатенация может быть менее удобной, чем сборка частей с join. В начальном упражнении сохранён явный цикл, чтобы показать накопление результата и независимое движение индекса.

Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Набор исключаемых символов сохранён точно.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.