파이썬에서 특정 문자열이 알파벳과 숫자(영숫자)만으로 이루어져 있는지 확인해야 할 때가 자주 있습니다. 대표적인 방법은 두 가지로, 내장 메서드 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]+$ 패턴을 활용하는 것이 좋습니다. 상황에 맞게 두 방법을 선택해 사용하시기 바랍니다.