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

파이썬에서 문자열이 알파벳·숫자(영숫자)로만 구성되어 있는지 확인하는 방법

파이썬에서 특정 문자열이 알파벳과 숫자(영숫자)만으로 이루어져 있는지 확인해야 할 때가 자주 있습니다. 대표적인 방법은 두 가지로, 내장 메서드 isalnum()을 사용하는 방법과 정규표현식(regular expression)을 사용하는 방법입니다. 각각의 사용법을 예제와 함께 살펴보겠습니다.

1. isalnum() 메서드로 확인하기

파이썬 문자열(String) 클래스는 isalnum()이라는 메서드를 기본적으로 제공합니다. 이 메서드를 호출하면 해당 문자열이 오직 알파벳과 숫자로만 구성되어 있는지 여부를 불리언 값으로 알려줍니다. 공백이나 특수문자가 하나라도 포함되어 있으면 False를 반환합니다.

print('123abc'.isalnum())

출력 결과

True
print('123#$%abc'.isalnum())

출력 결과

False

참고: 한글 등 유니코드 문자 처리

isalnum()은 유니코드 기준으로 동작하기 때문에 한글과 같은 비(非)영어권 문자도 '알파벳'으로 간주하여 True를 반환합니다. 만약 영어 알파벳과 숫자만 엄격하게 허용하고 싶다면 아래의 정규표현식 방식을 사용하는 것이 더 안전합니다.

2. 정규표현식(Regex)으로 확인하기

동일한 작업은 정규표현식을 통해서도 수행할 수 있습니다. re.match(regex, string) 함수에 패턴 "^[a-zA-Z0-9]+$"을 지정하면, 문자열 전체가 영어 알파벳 대소문자와 숫자로만 이루어져 있는지 검사할 수 있습니다.

import re
print(bool(re.match('^[a-zA-Z0-9]+$', '123abc')))

출력 결과

True
import re
print(bool(re.match('^[a-zA-Z0-9]+$', '123abc#$%')))

출력 결과

False

bool()로 변환하는 이유

re.match()는 매칭 결과를 객체(object) 형태로 반환합니다. 매칭에 성공하면 match 객체를, 실패하면 None을 반환하기 때문에, 결과의 존재 여부를 명확한 True/False 값으로 얻으려면 bool()을 사용해 변환해 주는 것이 좋습니다.

정리

간단한 검사라면 isalnum() 메서드가 가장 편리하고, 영어 알파벳과 숫자만 정확히 걸러내야 하는 경우에는 정규표현식 ^[a-zA-Z0-9]+$ 패턴을 활용하는 것이 좋습니다. 상황에 맞게 두 방법을 선택해 사용하시기 바랍니다.