앱에서 유저에게 어떠한 입력값을 받는 경우가 많다. 이메일이나 전화번호 형식을 입력받는다던지, 숫자를 입력받아야 하는 상황이라면 정규표현식을 활용하여 문자열을 검사하면 된다.
공식문서에는 NSRegularExpression을 활용하여 문자열을 검사하는 방법이 나와있다. 하지만 디테일하게 문자열을 검사할 것이 아니라면 좀더 간단하게 검사도 가능하다.
아래와 같이 간단한 함수로 문자열 검사가 가능하다! string은 검사하고자 하는 문자열, regex는 정규표현식이다. 과연 그렇다면 어떤 정규식을 넣어야 할까?
func check(_ string: String, _ regex: String) -> Bool {
return string.range(of: regex, options: .regularExpression) != nil
}
정규표현식
문자열의 일정한 패턴을 표현하는 일종의 형식 언어를 말한다. Swift에서는 아래와 같은 형식으로 사용한다. ^는 시작 부분, $는 마지막에 넣어준다.
"^[A-Z]*$" // 알파벳 대문자
"^[a-z]*$" // 알파벳 소문자
"^[0-9]*$" // 숫자
"^[\\d]*$" // 숫자
"^[0-9a-zA-Z]*$" // 알파벳, 숫자
"^[\\w]*$" // 알파벳, 숫자
그외에 다양한 정규식들은 아래의 사이트에서 테스트하고 확인해 볼 수 있다. (많은 정규식들이 이미 인터넷에 잘 마련되어있다.)
사용 예시
나는 내가 하고있는 프로젝트에 이 정규표현식을 사용한 문자열 검사를 사용했는데, 이유는 아이디가 알파벳, 숫자, 밑줄만 가능하기 때문에 해당 조건을 만족해야 다음으로 넘어갈 수 있게 했다.
import SwiftUI
struct InputView: View {
@State private var id = ""
private var isValid: Bool {
let pattern = "^[a-zA-Z0-9_]{1,}$"
return id.range(of: pattern, options: .regularExpression) != nil
}
var body: some View {
VStack {
Text("아이디를 입력해주세요")
TextField("", text: $id)
.padding()
.background {
RoundedRectangle(cornerRadius: 16)
.foregroundStyle(.bar)
}
.padding(.horizontal)
if !isValid && id != "" {
Text("아이디는 알파벳, 숫자와 밑줄(_)만 가능해요")
}
Button("확인") {
}
.buttonStyle(BorderedButtonStyle())
.disabled(!isValid)
}
}
}
아이디 입력란에 다른 것을 넣게 된다면 아래와 같은 문구가 나타나게 했다.
'→ Swift Archive' 카테고리의 다른 글
[SwiftUI] 스크롤 위치 추적하기 (1) | 2024.02.16 |
---|---|
[SwiftUI] 커스텀 달력 만들기 (1) | 2024.02.06 |
[SwiftUI] TabView 이상한 현상 발견?! (0) | 2024.02.03 |
[SwiftUI] 앱의 실행, 종료 알기 (1) | 2024.01.27 |
[SwiftUI] 앱이 background 에서 다시 돌아왔을 때 알기 (0) | 2024.01.27 |