Булевы методы строк в 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, чтобы быстро выбрать нужный метод в повседневной работе.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone