반응형
서론
Swift 언어 자체에서는 정규식을 지원하지 않아서 별도의 클래스를 이용해야 합니다.
NSPredicate는 콜렉션 안의 내용을 검색하거나 필터링하는 용도로 많이 사용되구요
NSRegularExpression가 유니코드 문자열에 적용되는 정규식을 표현하므로,
NSRegularExpression를 사용한 정규식 표현들을 알아보도록 하겠습니다.
NSRegularExpression의 정규식 메타 문자
* u으 = uhhhh \x{으} = \xhh 엔 = n 무늬 = pattern
정규식 연산자
*엔 = n
템플릿 일치 양식
* 엔 = n
플래그 옵션
* 패턴은 i , x, s, m, w 순 입니다.
통으로 변역기를 돌려서 표현이 좀 이상할수도 있습니다 ^^;;
표현식은 공식 문서 참고하시면 되겠습니다.
developer.apple.com/documentation/foundation/nsregularexpression/
사실 저걸 다 외울필요는 없고 어떻게 쓰는구나 정도만 알면 된다고 생각합니다.
정규식 양식은 검색하면 널려있으니까요....ㅎ
이제 이 정규식을 사용해서 id/pw 및 email 입력에 대해 검수하는 프로그램을 간단히 구현해보도록 하겠습니다.
ID형식 검수
6자리 이상의 소문자, 숫자로만 구성된 입력인지 검사하는 정규식입니다.
//영문 소문자-숫자로만 구성된 6자리 이상의 문자열인지 검사
func idRegularExpression(_ input: String) -> Bool{
let pattern = "^[a-z0-9]{6,}$"
let regex = try? NSRegularExpression(pattern: pattern)
if let _ = regex?.firstMatch(in: input, options: [], range: NSRange(location: 0, length: input.count)) {
print("정규식 통과")
return true
}
print("유효하지 않은 id 형식입니다.")
return false
}
결과
잘 작동하는 군요!
func sginUpRegularExpression(_ input: String, _ type: Int) -> Bool{
var pattern: String = ""
switch type {
case 1:
pattern = "^[a-z0-9]{11,}$"
case 2:
//최소 8자, 최소 하나의 영문 대문자/소문자 및 숫자 및 특수문자
pattern = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*]).{8,20}"
case 3:
pattern = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}$"
default:
print("[sginUpRegularExpression function] type error")
return false
}
let regex = try? NSRegularExpression(pattern: pattern)
if let _ = regex?.firstMatch(in: input, options: [], range: _NSRange(location: 0, length: input.count)){
print("정규식 통과")
return true
}
return false
}
type으로 받는 정수값에 따라 패턴을 결정하게 작성하였습니다.
type이 1은 Id, 2는 pw, 3은 이메일을 검수하게 되겠네요!
반응형
'Language > Swift' 카테고리의 다른 글
[Swift] 고차함수 Map, Filter, Reduce (0) | 2021.04.05 |
---|---|
[Swift] GCD로 경마 구현해보기 (0) | 2021.03.24 |
Swift GCD(Grand Central Dispatch) [5] - Group, WorkItem (0) | 2021.03.23 |
Swift GCD(Grand Central Dispatch) [4] - RunLoop 실행과 종료 (0) | 2021.03.23 |
Swift GCD(Grand Central Dispatch) [3] - 예제 사용해보기 (0) | 2021.03.22 |