[iOS] 정규식을 사용해보자

Madeline👩🏻‍💻·2024년 7월 18일
3

iOS study

목록 보기
61/61
post-thumbnail

정규식(정규 표현식, Regular Expression)이 뭐야

정규식은 텍스트 내에서 특정 패턴을 찾거나, 대체하거나, 추출할 수 있게 해주는 도구이다!
주로 문자열 검색, 치환, 검증 등의 작업을 할 때 많이 사용된다.
정규식은 복잡한 문자열 처리 작업을 간단하고 효율적으로 할 수 있게 해준다!

언제 써?

전화 번호 형식을 검증하거나, URL이 유효한지 검사할 때,

로그인 & 회원 가입 시에 이메일이나 비밀번호 등 문자열의 형식이 잘 들어맞는지 확인할 때!!

날짜 형식, 아니면 어떤 파일의 확장자를 검색할 때 등등!!!!

-> 정규식은 특별한 문자열 패턴이다. 예를 들어, 이메일에는 "@"와 "."이 반드시 포함되어야 할 때, 이걸 정규식으로 표현해두고 검사하는거다!

Swift에서 정규식 사용하기

Swift에서는 NSRegularExpression 클래스를 사용한다.

기본 메서드는 이런게 있다!

enumerateMatches(in:options:range:using:): 주어진 문자열에서 패턴과 일치하는 모든 부분을 반복 처리합니다.

matches(in:options:range:): 주어진 문자열에서 패턴과 일치하는 모든 부분을 배열로 반환합니다.

numberOfMatches(in:options:range:): 주어진 문자열에서 패턴과 일치하는 부분의 개수를 반환합니다.

firstMatch(in:options:range:): 주어진 문자열에서 패턴과 처음으로 일치하는 부분을 반환합니다.

rangeOfFirstMatch(in:options:range:): 주어진 문자열에서 패턴과 처음으로 일치하는 부분의 범위를 반환합니다.

stringByReplacingMatches(in:options:range:withTemplate:): 주어진 문자열에서 패턴과 일치하는 모든 부분을 템플릿 문자열로 대체한 새로운 문자열을 반환합니다.

replaceMatches(in:options:range:withTemplate:): 주어진 가변 문자열에서 패턴과 일치하는 모든 부분을 템플릿 문자열로 대체합니다.

일단 써보자

1. 이메일 정규식

// 이메일 정규식
let emailPattern = "^[A-Z0-9a-z]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$"

진짜 무슨 외계어같다

  • ^ : 문자열의 시작

    [A-Z0-9a-z]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}

  • [A-Z0-9a-z]: 대문자 (A-Z), 숫자 (0-9), 소문자 (a-z) 중 하나 이상

  • '+': 하나 이상!

  • @: 말 그대로 '@' 기호

  • [A-Za-z0-9.-]: 대문자, 소문자, 숫자, 점(.), 하이픈(-) 중 하나 이상 (도메인 이름 부분),

  • '+': 하나 이상!

  • '\\.': 점('.') -> '\\'는 의미 없는 진짜 점임을 나타냄

  • [A-Za-z]{2,6}: 대문자나 소문자로 된 2~6자 문자열(최상위 도메인 부분, "com")

  • $ : 문자열의 끝

2. 비밀번호 정규식

// 비밀번호 정규식 (8자 이상, 영문, 숫자, 특수문자 포함)
let passwordPattern = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$"

"^(?=.[A-Za-z])(?=.\d)(?=.[@$!%#?&])[A-Za-z\d@$!%*#?&]{8,}$"

- ^ : 문자열의 시작
- (?=.*[A-Za-z]) :긍정적 전방 탐색(Positive Lookahead)
- '.*' : 어떤 문자(.)0개 이상(*)
- [A-Za-z] : 영문자 하나

// -> 의미: 앞으로 영문자가 적어도 하나 있어야 함


- (?=.*\\d) : 숫자가 적어도 하나 있어야 함
- \d는 숫자를 의미, \\d는 Swift에서 \d를 표현하는 방식


- (?=.*[@$!%*#?&]) : 특수문자(@$!%*#?& 중 하나)가 적어도 하나 있어야 함


- [A-Za-z\\d@$!%*#?&]{8,} : 허용된 문자들(영문자, 숫자, 특정 특수문자)로 구성
- {8,} : 8자 이상
- $ : 문자열의 끝

위 예시를 통과하는 문자열:
uuu123@jjddj.com
kkk00!!22

profile
🍎 Apple Developer Academy@POSTECH 2기, 🍀 SeSAC iOS 4기

1개의 댓글

comment-user-thumbnail
2024년 7월 18일

너무 유익해여! (진심)

답글 달기