정규식을 검색해보면 크게
NSRegularExpression타입과 NSPredicate타입이 있어요
둘의 차이는
NSPredicate - 메모리 내 필터링 이나 검색을 통한 패치 -> Collection안의 내용을 검색 혹은 필터하는 용도
NSRegularExpression - 유니코드 문자열에 적용되는 정규식의 표현 -> 정규식!
흔히말하는 정규표현식은
NSRegularExpression을 사용하구요! 타입이름도 좀더 정규표현식같죠?
(같은 패턴으로 NSPredicate를 사용하면 맞는데 틀리다고 나오는경우가 있어요)
문법부터 보면 더 헷갈리기때문에
예제와함께 이해해볼게요
바로바로 확인할 수 있는 실습사이트는
에서 해볼수 있어요
let pattern = "^[A-Za-z0-9]{0,}$"
// A-Za-z0-9에 속하는 문자열인지 검사
^: 시작을 나타냄
$: 종료를 나타냄
{0, }: 0개 이상
[]: 괄호안에 있는 문자중 임의의 한 문자
이런 패턴을 넣어줘서 정규식타입을 만들어주고
let pattern = "^[A-Za-z0-9~!@#$%^&*]{0,}$"
let regex = try? NSRegularExpression(pattern: pattern)
if let _ = regex?.firstMatch(in: string, options: [], range: NSRange(location: 0, length: string.count)) {
// 있는경우
}
firstMatch()를 통해서 유효한 문자열인지 검사할 수 있어요
위의 정규식을 해석하면
A~Z: A부터 Z까지 - 1
a~z: a부터 z까지 - 2
0~9: 0부터 9까지 - 3
~!@#$%^&* - 4
1,2,3,4그룹에 속한 문자가 0개이상 존재하는 유효성을 검사해요
영어와 숫자 그리고 지정해준 특수문자만 입력할 수 있는 정규식이될거에요
let pattern = "(.)\\1{3,}"
// 앞과 동일한 문자가 있어야하고 그길이는 3이상이여야함
// 앞문자 + 동일한문자3글자이상 -> 중복문자 4글자이상
(): 문자를 묶음처리
(.): 임의의 문자
\1: 앞의 부분식
\1를 인식할때는 \를 하나더붙여줘서 \\1로 써줘야 인식하구요
다른 모든표현에도 \가 들어가있는 연산자라면 \를 하나더 붙여서 \\형식으로 사용해야해요
따라서 위의 표현식은
(.)\\1{3,} -> 앞과 동일한 문자가 3개 이상 있어야한다
앞과 동일한 문자가3개이상이니까 4개이상 같은문자가 있는 경우를 찾아주겠네요
{3,0} 이런 범위를 나타땔 때 기호로 줄여서 쓰기도해요
*: {0,} 0이상
+: {1.} 1이상
?: {0,1} 0이상 1이하
[A-Z]* 이런표현이라면
A부터Z까지중 0개이상이라는 표현이 되겠네요
핸드폰 정규식
핸드폰 번호의 정규식을 나타내볼까요?
^01([0-9])([0-9]{3,4})([0-9]{4})$
이런식으로
01 다음에 0~9중 하나가오고
0~9중 3개이상 4개이하
0~9중 4개
()는 이렇게 문자의 자리를 지정해주는 느낌이에요
이메일 정규식
^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}$
이메일 nsios@kakao.com 이런 표현식이 적용되요
해석해보면
노랑색은 이제 익숙하죠
해당범위의 문자열이면 되는거고 갯수는 1이상이네요 +는 {1,} 를 나타낸다고했어요!
@로 사이에 @를 추가해주고
초록범위의 문자열이면 되는거고 갯수는 1이상
그리고 \.를 추가해줘서(작성시에는 \하나더추가해서 \\.형태)
.을 추가해줫어요
마지막끝에는
영어범위만 2자이상 20자이하로 제한을 준 표현이네요
(1자이상의 표현범위문자열)@(1자이상 표현범위문자열).(2자이상20자이하 포현범위문자열)
\A: A를 문자로 사용하기위해서 사용 \.이라면 문자로 .을 사용하기 위함
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] UITableViewDiffableDataSource (0) | 2021.05.01 |
---|---|
[Swift] UICollectionViewCompositionalLayout (0) | 2021.04.27 |
[Swift] TTS 텍스트 음성전환 (AVSpeechSynthesizer) (0) | 2021.02.23 |
[Swift] AVAudioRecord, AVAudioPlayer, AVAudioEngine을 사용한 음성파일 재생, 녹음, 효과음 주기 (2) | 2021.02.19 |
[Swift] CountDown Animation Label 구현 (2) | 2021.02.11 |