C.W.K.
Stream
Lesson 10 of 12 · published

전화번호

~8 min · phone, validation, international

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

전화번호가 wildly variable

US: (415) 555-0199, 415-555-0199, 415.555.0199, +1 415 555 0199. 한국: 010-1234-5678, 02-1234-5678. UK: +44 7700 900123. 모든 나라가 변형 가짐.

모양 loose 패턴

텍스트의 phone-like 거 찾기:

\+?\d[\d\s().-]{7,}\d

Optional 플러스, 숫자, 그 다음 7+ 글자 숫자/공백/괄호/점/대시, 숫자로 끝.

US 특정 검증

^(?:\+1\s*)?(?:\(\d{3}\)|\d{3})[\s.-]?\d{3}[\s.-]?\d{4}$

Optional +1, area code (괄호 또는 bare), 구분자, exchange, 구분자, 라인 번호.

진짜 검증엔: libphonenumber

Google 의 libphonenumber 가 모든 나라, 포맷 변형, 검증 룰 처리. Python (phonenumbers), JS, Java 등 바인딩 존재. 본인 앱이 국제 전화번호 받으면 사용. 정규식이 거기 못 데려감.

가장 단순 유용 패턴

그냥 "phone-shape 레이아웃에 10+ 숫자 포함" 원하면 위 loose 패턴이 자유 텍스트 추출에 OK. 검증엔 country-specific 패턴 OR libphonenumber 필요.

Code

전화번호 패턴·python
import re

# Loose 추출
PHONE_LOOSE = re.compile(r'\+?\d[\d\s().-]{7,}\d')
re.findall(PHONE_LOOSE, 'call (415) 555-0199 or +82 10-1234-5678')
# ['(415) 555-0199', '+82 10-1234-5678']

# US 특정
US_PHONE = re.compile(
    r'^(?:\+1\s*)?(?:\(\d{3}\)|\d{3})[\s.-]?\d{3}[\s.-]?\d{4}$'
)
bool(US_PHONE.fullmatch('(415) 555-0199'))  # True
bool(US_PHONE.fullmatch('415-555-0199'))    # True
bool(US_PHONE.fullmatch('+1 415 555 0199')) # True
bool(US_PHONE.fullmatch('415-555'))         # False (불완전)

# 진짜 검증엔
# pip install phonenumbers
# import phonenumbers
# phone = phonenumbers.parse('+82 10-1234-5678', None)
# phonenumbers.is_valid_number(phone)  # True
# phonenumbers.format_number(phone, phonenumbers.PhoneNumberFormat.E164)
# # '+821012345678'

External links

Exercise

phonenumbers 설치. 본인 연락처에서 전화번호 5개 (다른 포맷) 가져와서 각각 libphonenumber 로 검증. 같은 거 본인 정규식으로. 정규식 실패하고 libphonenumber 성공하는 자리 메모.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.