Isdigit: примеры (PYTHON)

Метод isdigit в Python для проверки цифровых символов
Раздел: Строки, Проверка символов
isdigit: bool

Описание метода isdigit

Метод str.isdigit() в Python предназначен для проверки строки на содержание только цифровых символов. Возвращает True, если все символы в строке являются цифрами и строка содержит хотя бы один символ. В противном случае возвращает False.

Когда используется:

  • Валидация пользовательского ввода (например, проверка номера телефона или индекса).
  • Предварительная обработка данных перед преобразованием строки в число.
  • Фильтрация или категоризация строк в текстовых данных.

Синтаксис и параметры:

Метод вызывается от строки и не принимает аргументов: string.isdigit()

Возвращаемое значение:

Метод возвращает булево значение bool (True или False).

Важное замечание:

Метод считает цифрами не только арабские цифры (0-9), но и специальные цифровые символы, например, верхние и нижние индексы, цифры других письменностей (римские цифры не считаются). Символы, такие как минус, точка или запятая, не являются цифрами для этого метода, поэтому строки, представляющие отрицательные или дробные числа, вернут False.

Базовые примеры использования

# Пример 1: Простая проверка
print('123'.isdigit())
True
# Пример 2: Строка с другими символами
print('123abc'.isdigit())
print('12.3'.isdigit())
print('-123'.isdigit())
False
False
False
# Пример 3: Пустая строка
print(''.isdigit())
False
# Пример 4: Специальные цифровые символы
print('\u00B2'.isdigit())  # Верхний индекс 2
print('\u2167'.isdigit())  # Римская цифра VIII (в Юникоде)
True
True

Похожие методы в Python

  • str.isnumeric() - Проверяет, все ли символы являются числовыми. Включает более широкий набор символов, чем isdigit(), например, дроби и римские цифры. '½'.isnumeric() вернет True, а '½'.isdigit() - False.
  • str.isdecimal() - Проверяет, все ли символы являются десятичными цифрами. Это наиболее строгая проверка, которая возвращает True только для символов, используемых для формирования чисел в десятичной системе (0-9 и их варианты в других письменностях).
  • str.isalnum() - Проверяет, все ли символы являются буквенно-цифровыми (буквы или цифры).

Когда что использовать:

isdigit() часто применяется для проверки строк, которые должны содержать только обычные цифры. isdecimal() используют для проверки строк, которые можно безопасно преобразовать в целое число с помощью int(). isnumeric() нужен для более широкой проверки числовых символов, включая дроби.

Аналоги в других языках программирования

JavaScript:

// Регулярное выражение
console.log(/^\d+$/.test('123')); // true
console.log(/^\d+$/.test('12a')); // false
true
false

PHP:

echo ctype_digit('123') ? 'true' : 'false'; // true
echo ctype_digit('12.3') ? 'true' : 'false'; // false
true
false

Java:

String str = '123';
System.out.println(str.matches('\\d+')); // true
String str2 = '12a';
System.out.println(str2.matches('\\d+')); // false
true
false

C#:

string str = '123';
Console.WriteLine(str.All(char.IsDigit)); // True
string str2 = '12a';
Console.WriteLine(str2.All(char.IsDigit)); // False
True
False

Golang:

import 'unicode'
str := '123'
allDigits := true
for _, r := range str {
    if !unicode.IsDigit(r) {
        allDigits = false
        break
    }
}
fmt.Println(allDigits) // true
true

Типичные ошибки

# Ошибка 1: Попытка проверить число, а не строку
num = 123
print(num.isdigit())  # Ошибка AttributeError
AttributeError: 'int' object has no attribute 'isdigit'
# Ошибка 2: Непонимание, что дробные числа не проходят проверку
price = '12.50'
if price.isdigit():
    int_price = int(price)  # Этот код не выполнится
else:
    print('Строка содержит не только цифры')
Строка содержит не только цифры
# Ошибка 3: Забывание о пустой строке
user_input = ''
if user_input.isdigit():
    print('Это цифры')
else:
    print('Пустая строка или не цифры')
Пустая строка или не цифры

Изменения в последних версиях Python

В Python 3 поведение метода isdigit() было четко определено в соответствии со стандартом Unicode. В Python 2 метод мог вести себя иначе для не-ASCII символов. Начиная с Python 3.0, метод последовательно проверяет свойство Unicode 'Numeric_Type=Digit' или 'Numeric_Type=Decimal'. Существенных изменений в работе метода в последних версиях Python 3.x не было.

Расширенные примеры использования

Пример python
# Пример 1: Фильтрация списка строк по наличию только цифр
lines = ['123', '45a6', '78.9', '-10', '0', '']
digit_lines = [line for line in lines if line.isdigit()]
print(digit_lines)
['123', '0']
Пример python
# Пример 2: Подсчет количества полностью цифровых слов в тексте
text = 'В 2023 году было 150 участников и 25 гостей.'
words = text.split()
digit_word_count = sum(1 for word in words if word.isdigit())
print(f'Количество цифровых слов: {digit_word_count}')
Количество цифровых слов: 3
Пример python
# Пример 3: Валидация номера телефона без форматирования
def is_valid_phone_raw(number_str):
    return number_str.isdigit() and 5 <= len(number_str) <= 15

print(is_valid_phone_raw('79101234567'))
print(is_valid_phone_raw('7-910-123-45-67'))
True
False
Пример python
# Пример 4: Проверка строк с цифрами других письменностей
print('१२३'.isdigit())   # Деванагари
print('٠١٢٣'.isdigit())  # Арабско-индийские
True
True
Пример python
# Пример 5: Сравнение с isnumeric и isdecimal
samples = ['123', '½', '१२३', '٢٠٢٤', 'IV']
for s in samples:
    print(f'{s}: isdigit={s.isdigit()}, isnumeric={s.isnumeric()}, isdecimal={s.isdecimal()}')
123: isdigit=True, isnumeric=True, isdecimal=True
½: isdigit=False, isnumeric=True, isdecimal=False
१२३: isdigit=True, isnumeric=True, isdecimal=True
٢٠٢٤: isdigit=True, isnumeric=True, isdecimal=True
IV: isdigit=False, isnumeric=False, isdecimal=False
Пример python
# Пример 6: Обработка пользовательского ввода с очисткой
user_input = ' 456 '
cleaned = user_input.strip()
if cleaned.isdigit():
    value = int(cleaned)
    print(f'Преобразованное число: {value}')
else:
    print('Ввод содержит недопустимые символы')
Преобразованное число: 456

питон isdigit function comments

En
Isdigit Check if all characters are digits