[Swift] 정규표현식

정규표현식

 

가끔 보면 문자열이 특정 문자의 형태와 일치하는지 확인해야 하는 경우가 있다.

,, ,, 이렇게만 말하면 무슨 말인지??? 싶은데

 

왜, 받아야 하는 형태가 정해져 있는 경우가 있을 것이다. 예를 들어 보자면...

abcdefg@email.com 이런 식으로 나타내야 하는 이메일이라등가 010-1234-1234로 나타내고 싶은 전화번호라든가.

물론 이 외에도 특정 문자열이 숫자 / 문자로만 이루어져 있어야 할 경우, 일치하는 모든 범위를 찾아야 할 경우 등 문자열을 검색할 때나 이메일, 핸드폰번호, 비밀번호에서 정규성 검사 시에 사용한다.

또한, 정규표현식 문법은 프로그래밍 언어마다 다르지 않고, 정규 표현식 자체의 문법에 따른다.

 

 

정규 표현식의 문법

메타문자

  • 문자의 본연의 의미를 가지기보다는 반복되거나 포함되는 등의 문법을 나타내기 위하여 사용한다.
  • ., *, +, ?, ^, $, {, }, |, [, ], \ 등이 메타문자에 포함됨

 

정규문자

  • 문자 본연의 의미를 가지는 문자를 말한다.
  • 만약 메타문자 중에서 정규문자로 나타내고 싶은 문자가 있다면, \ (역슬래쉬)를 통해 나타낼 수 있다.

 

 

 

 

정규표현식의 예시

 

핸드폰 번호

let phoneNumRegex = #"[0-9]{3}\-[0-9]{4}\-[0-9]{4}"#

 

  • 앞뒤에 #을 넣어서 rawString으로 정규표현식을 작성해 주었다.
  • [0-9]: 0~9까지 해당하는 숫자만 들어갈 수 있음
  • {3}: 이 숫자가 세 자리만!
  • \-: -를 표현하기 위해 사용! 원래는 swift 문법 상으로 \\-가 되어야 했으나, 그걸 쓰기 싫어서 rawValue 사용 ^_^

 

이메일

let emailRegex = #"^([a-zA-Z0-9._-])+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,20}$"#
  • ^ : 시작을 나타냄
  • + : +를 구분으로 하여 조건이 나뉨
  • 길이 상관 없이 영어 소문자 / 대문자 / 숫자 / . / _ / - 가 @ 전에 들어가도록
  • @ 이후로 조건도 위와 같음
  • \. : 점이 필수로 들어가야 함
  • 점 이후로 대소문자가 두 글자 이상, 20글자 이하로
  • $ : 끝을 나타냄

 

비밀번호

let passwordRegex = #"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{6,}$"#
  • (?= ) : if문을 이런 식으로 표현함
  • (?=.*[A-Z]): 대문자가 최소 한 글자 이상 포함되어 있어야 함
  • (?=.*[a-z]): 소문자가 최소 한 글자 이상 포함되어 있어야 함
  • (?=.*\d) : 숫자가 최소한 한 글자 이상 포함되어 있어야 함
  • {6,} : 문자열의 전체 길이가 최소 여섯 자리 이상

 

 

 

 

사용법

let emailRegex = #"^([a-zA-Z0-9._-])+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,20}$"#

str.range(of: emailRegex, options: .regularExpression) != nil // email

 

사용 시에는 위와 같이 사용함

 

 

 

해당 method에 대한 공식 문서는 아래!

 

 

https://developer.apple.com/documentation/foundation/nsstring/1416849-range

 

range(of:options:) | Apple Developer Documentation

Finds and returns the range of the first occurrence of a given string within the string, subject to given options.

developer.apple.com

 

 

 

 

참고한 자료 :3

 

https://regexr.com

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

https://tngusmiso.tistory.com/62

 

[Swift] 코딩테스트 보다가 열 받아서 정리하는 Swift 정규식 - NSRegularExpression (Regex)

문자열 문제 진짜 어렵다!!!!!!!!! 매번 구글링 하지 말고 정리해 둬야 겠다는 필요성을 느꼈다... Swift 주의사항 문자열에서 역슬래쉬(\)는 연산자 역할을 하므로, \를 문자 자체로 사용하고 싶은

tngusmiso.tistory.com

https://ios-development.tistory.com/1087

 

[iOS - swift] 문자열 정규식 처리 방법 (Regex, Regular Expression, 전화번호, 이메일, 비밀번호)

특정 문자 형태와 일치하는지? regex를 문자열을 정의한 후, regex와 확인하려는 문자 형태를 비교하여 확인 확인하는 방법은 range(of:options:)라는 String 메소드 사용 문자열내에서 특정 문자열이 존

ios-development.tistory.com