Гид по технологиям

Булевы методы строк в Python: проверка формата текста

6 min read Программирование Обновлено 28 Dec 2025
Булевы методы строк в Python
Булевы методы строк в Python

Мужчина держит карточку с логотипом Python

Строка в Python — это последовательность символов. С помощью встроенных методов можно быстро проверить содержимое строки и принять решение в коде (например, валидировать ввод пользователя). Булевы методы строк возвращают True, если строка удовлетворяет условию, и False — если нет. Далее — подробное руководство по основным методам с примерами, подводными камнями и практическими рекомендациями.

Проверка: содержит ли строка только буквенно-цифровые символы

Метод: isalnum()

Этот метод возвращает True, если все символы строки являются буквенно-цифровыми (латинские буквы A–Z / a–z, цифры 0–9, а также буквы и цифры других алфавитов в Юникод). Если строка пуста или содержит пробелы/спецсимволы, результат — False.

Примеры:

# Примеры isalnum()
str1 = "WelcomeToMUO"
# True — все символы буквенно-цифровые
print(str1.isalnum())  # True

str2 = "Welcome To MUO"
# False — есть пробелы
print(str2.isalnum())  # False

str3 = "#WelcomeToMUO"
# False — есть специальный символ
print(str3.isalnum())  # False

str4 = "274962472"
# True — только цифры
print(str4.isalnum())  # True

str5 = "Welcome2MUO"
# True — буквы + цифры
print(str5.isalnum())  # True

Вывод:

True
False
False
True
True

Важно: пустая строка возвращает False: "".isalnum() -> False.

Проверка: состоит ли строка только из букв

Метод: isalpha()

Возвращает True, если все символы строки являются буквами (включая буквы Юникода). Если в строке есть пробелы, цифры или спецсимволы — False.

Примеры:

# Примеры isalpha()
str1 = "WelcomeToMUO"
print(str1.isalpha())  # True

str2 = "Welcome To MUO"
print(str2.isalpha())  # False (пробелы)

str3 = "#WelcomeToMUO"
print(str3.isalpha())  # False (спецсимвол)

str4 = "274962472"
print(str4.isalpha())  # False (только цифры)

str5 = "Welcome2MUO"
print(str5.isalpha())  # False (есть цифра)

Вывод:

True
False
False
False
False

Примечание: буквы других алфавитов тоже считаются буквами, поэтому “Привет”.isalpha() вернёт True.

Проверка числовых символов: isdecimal(), isdigit(), isnumeric()

Методы: isdecimal(), isdigit(), isnumeric()

Эти три метода похожи, но имеют различия в охвате символов Юникода:

  • isdecimal(): проверяет символы, пригодные для формирования десятичных чисел (категория Юникода “Nd”). Это наиболее строгий вариант.
  • isdigit(): включает десятичные цифры и некоторые специальные цифровые символы, например надстрочные цифры.
  • isnumeric(): самый общий — включает цифры, дроби-символы (например «½») и другие символы с числовым значением.

Отношение множеств: isdecimal() ⊆ isdigit() ⊆ isnumeric(). То есть, если isdecimal() вернул True, то и isdigit(), и isnumeric() тоже вернут True.

Примеры:

# Примеры: числа и символы Юникода
str1 = "8734947"
print("str1.isdecimal():", str1.isdecimal())   # True
print("str1.isdigit():", str1.isdigit())       # True
print("str1.isnumeric():", str1.isnumeric())   # True

str2 = "½"  # U+00BD — vulgar fraction one half
print("str2.isdecimal():", str2.isdecimal())   # False
print("str2.isdigit():", str2.isdigit())       # False
print("str2.isnumeric():", str2.isnumeric())   # True

str3 = "⁰¹²³⁴⁵⁶⁷⁸⁹"  # надстрочные цифры
print("str3.isdecimal():", str3.isdecimal())   # False
print("str3.isdigit():", str3.isdigit())       # True
print("str3.isnumeric():", str3.isnumeric())   # True

Вывод:

str1.isdecimal(): True
str1.isdigit(): True
str1.isnumeric(): True
str2.isdecimal(): False
str2.isdigit(): False
str2.isnumeric(): True
str3.isdecimal(): False
str3.isdigit(): True
str3.isnumeric(): True

Практическая рекомендация: если вам нужно гарантировать, что строка представляет собой обычное целое число в десятичной записи — используйте isdecimal(). Если важен более широкий набор цифровых символов (например, надстрочные цифры), применяйте isdigit()/isnumeric() с учётом контекста.

Проверка: является ли строка допустимым идентификатором

Метод: isidentifier()

Возвращает True, если строка удовлетворяет правилам идентификаторов Python: содержит только буквенно-цифровые символы и/или символ подчёркивания, не начинается с цифры и не содержит пробелов.

Примеры:

str1 = "var1"
print(str1.isidentifier())  # True

str2 = "var 1"
print(str2.isidentifier())  # False (пробел)

str3 = "var1#"
print(str3.isidentifier())  # False (спецсимвол)

str4 = "_var1_"
print(str4.isidentifier())  # True

str5 = "1var"
print(str5.isidentifier())  # False (начинается с цифры)

Вывод:

True
False
False
True
False

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

Проверка регистра: все ли символы верхнего или нижнего регистра

Методы: isupper(), islower()

  • isupper() возвращает True, если в строке есть хотя бы одна буква и все буквы — в верхнем регистре.
  • islower() возвращает True, если в строке есть хотя бы одна буква и все буквы — в нижнем регистре.

Важно: если строка не содержит букв, оба метода вернут False.

Примеры:

str1 = "MAKEUSEOF"
print(str1.isupper(), str1.islower())  # True False

str2 = "makeuseof"
print(str2.isupper(), str2.islower())  # False True

str3 = "MakeUseOf"
print(str3.isupper(), str3.islower())  # False False

Вывод:

True False
False True
False False

Проверка пробелов: состоит ли строка только из пробельных символов

Метод: isspace()

Возвращает True, если строка содержит только символы пробела (включая табы, переводы строки и другие пробельные символы Юникода) и не пуста.

Примеры:

str1 = " "
print(str1.isspace())  # True

str2 = " MUO "
print(str2.isspace())  # False (есть буквы)

str3 = "\t"
print(str3.isspace())  # True (таб)

Вывод:

True
False
True

Проверка заглавных слов (стиля заголовка)

Метод: istitle()

Возвращает True, если каждое слово в строке начинается с заглавной буквы, а остальные буквы слова — строчные. Слова, содержащие не-алфавитные символы, могут повлиять на результат.

Примеры:

str1 = "Welcome To Muo"
print(str1.istitle())  # True

str2 = "Welcome to Muo"
print(str2.istitle())  # False (слово "to" не с заглавной)

str3 = "welcome to muo"
print(str3.istitle())  # False

Вывод:

True
False
False

Частые ошибки и ограничения (когда методы дают неожиданный результат)

  • Пустая строка почти всегда даст False (например, “”.isalpha() -> False). Учтите это при валидации.
  • Методы ориентируются на свойства символов Юникода. Например, буквы кириллицы считаются буквами, дроби и римские цифры — числовыми в isnumeric().
  • isupper()/islower() требуют наличия по крайней мере одной буквы; строка из цифр вернёт False.
  • isidentifier() проверяет соответствие правилам идентификаторов Python, но не проверяет, является ли имя ключевым словом (keyword). Например, “for” — isidentifier() вернёт True, но это ключевое слово языка.

Совет: комбинируйте проверки с дополнительной логикой (например, strip() перед проверкой на пробелы) и обрабатывайте пустые строки отдельно.

Альтернативные подходы

  • Регулярные выражения (re) дают гибкость для сложных шаблонов, но громоздки для простых проверок (isalnum/isalpha быстрее и понятнее).
  • Попытка приведения к числу через int()/float() в блоке try/except — пригодна для проверки, действительно ли строка представляет целое/вещественное число, но не полезна для символов Юникода вроде «½».
  • unicodedata — модуль для детальной работы с категориями Юникода, когда нужно точное поведение для специальных символов.

Шпаргалка (cheat sheet)

  • isalnum() — буквы или цифры
  • isalpha() — только буквы
  • isdecimal() — только десятичные цифры (категория Nd)
  • isdigit() — десятичные и некоторые другие цифровые символы
  • isnumeric() — все символы с числовым значением
  • isidentifier() — допустимое имя в Python
  • isupper() / islower() — регистр букв
  • isspace() — только пробельные символы
  • istitle() — слова в заглавном стиле

Decision flow: какой метод выбрать? (Mermaid)

flowchart TD
  A[Начало: есть строка s?] --> B{Проверка числа?}
  B -- Да --> C{Требуется строгое десятичное?}
  C -- Да --> D[use s.isdecimal'']
  C -- Нет --> E{Поддержка дробей/юникод цифр?}
  E -- Да --> F[use s.isnumeric'']
  E -- Нет --> G[use s.isdigit'']
  B -- Нет --> H{Проверка букв?}
  H -- Да --> I[use s.isalpha'']
  H -- Нет --> J{Пробелы / регистр / идентификатор}
  J -- Пробелы --> K[use s.isspace'']
  J -- Регистр --> L[use s.isupper'' / s.islower'']
  J -- Идентификатор --> M[use s.isidentifier'']
  D & F & G & I & K & L & M --> Z[Конец]

Роль‑ориентированные чеклисты

Разработчик:

  • Очистить ввод: применить strip() если нужно.
  • Для чисел: выбрать isdecimal/isdigit/isnumeric в зависимости от требований.
  • Обработать пустую строку отдельно.

QA / Тестировщик:

  • Подготовить тесты на ASCII и Unicode символы.
  • Проверить поведение для пустой строки.
  • Проверить граничные случаи: надстрочные цифры, дроби, кириллица.

Продуктовый аналитик:

  • Ясно задокументировать требования к формату (какие символы допустимы).
  • Решить, нужно ли принимать разные писания (напр., пробелы, дефисы).

Критерии приёмки

  • Функция валидации возвращает True для строк, которые однозначно соответствуют заданному формату, и False для остальных.
  • Пустые строки обрабатываются отдельно и документируются.
  • Unicode-случаи (фракции, надстрочные цифры, кириллица) проверены и согласованы с требованиями.

Тест-кейсы (примеры для автоматизированных тестов)

  • Ввод: “123” → isdecimal() True, isalpha() False
  • Ввод: “½” → isnumeric() True, isdecimal() False
  • Ввод: “Привет” → isalpha() True
  • Ввод: “ “ → isspace() True
  • Ввод: “var_name” → isidentifier() True
  • Ввод: “1var” → isidentifier() False

Совместимость и версия Python

Все перечисленные методы доступны в Python 3.x. Поведение основано на свойствах Юникода, поэтому результаты стабильны между версиями Python 3, но могут зависеть от версии таблиц Юникода, встроенных в интерпретатор.

Короткая памятка по безопасности и локализации

  • Не полагайтесь на эти методы для защиты от злонамеренных данных: они проверяют формат, но не фильтруют специальные последовательности (например, SQL-инъекции). Для безопасности используйте параметризованные запросы и дополнительные слои валидации.
  • При работе с пользовательским вводом учитывайте локаль: буквы и цифры в других алфавитах определяются через свойства Юникода.

Краткое резюме

Булевы методы строк в Python — простой и эффективный способ валидировать строки по распространённым критериям (буквы, цифры, регистр, пробелы, идентификаторы). Понимание различий между isdecimal(), isdigit() и isnumeric() особенно важно при работе с символами Юникода. Комбинируйте эти методы с предварительной очисткой строки и дополнительной логикой, чтобы избежать ложных срабатываний.

Важно: всегда тестируйте на примерах, характерных для вашего приложения (локаль, допустимые символы, формат входных данных).

Дополнительно: используйте приведённую шпаргалку и decision flow, чтобы быстро выбрать нужный метод в повседневной работе.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

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

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство