Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 문자열이 숫자로만 이루어져 있는지 확인하는 방법

Python으로 개발하다 보면 입력값이 숫자로만 구성되어 있는지 검증해야 하는 경우가 자주 있습니다. 예를 들어 전화번호, 사용자 ID, 수량 입력 등을 처리할 때 유용합니다. 이 글에서는 대표적인 두 가지 방법인 isdigit() 메서드와 정규 표현식을 소개합니다.

1. isdigit() 메서드 사용하기

Python에는 내장 문자열 메서드인 isdigit()이 있습니다. 이 메서드는 문자열의 모든 문자가 숫자(0~9)일 경우 True를 반환하고, 하나라도 다른 문자가 포함되어 있으면 False를 반환합니다.

>>> string = '9764135408'
>>> string.isdigit()
True
>>> string = '091-9764135408'
>>> string.isdigit()
False

위 예제에서 볼 수 있듯이, 하이픈(-)처럼 숫자가 아닌 문자가 섞여 있으면 False가 반환됩니다. 따라서 음수(-123)나 소수(3.14)를 검사할 때는 이 메서드가 적합하지 않다는 점에 유의해야 합니다.

2. 정규 표현식 사용하기

re 모듈의 정규 표현식을 활용하면 더욱 유연하게 숫자 여부를 검사할 수 있습니다.

>>> import re
>>> bool(re.match('^[0-9]+$', '9764135408'))
True
>>> bool(re.match('^[0-9]+$', '091-9764135408'))
False

여기서 사용된 패턴 ^[0-9]+$의 의미는 다음과 같습니다.

  • ^ : 문자열의 시작을 나타냅니다.
  • [0-9]+ : 0부터 9 사이의 숫자가 하나 이상 연속되어야 합니다.
  • $ : 문자열의 끝을 나타냅니다.

re.match()는 패턴이 일치하면 매칭 객체를, 일치하지 않으면 None을 반환하므로, bool()로 감싸면 결과를 깔끔하게 불리언 값으로 변환할 수 있습니다.

참고: 유사한 내장 메서드들

Python은 isdigit() 외에도 비슷한 목적의 메서드를 제공하며, 각각 허용 범위가 조금씩 다릅니다.

  • isdecimal() : 십진수 문자만 허용하는 가장 엄격한 검사입니다.
  • isdigit() : 십진수에 더해 윗첨자 숫자(예: ²)도 허용합니다.
  • isnumeric() : 분수, 로마 숫자, 한자 숫자 등까지 허용하는 가장 관대한 검사입니다.

일반적으로 아라비아 숫자(0~9)만 허용하고 싶다면 isdigit()이나 정규 표현식 방식을 사용하는 것이 가장 안전합니다.