카테고리 없음
swift 이메일 패스워드 형식 검사에 대해 알아보자
kingarthur
2024. 7. 24. 19:41
Regular Expression(정규 표현식)
- 특정한 규칙을 가진 문자열의 집합을 표현
- 주로 문자열 검색이나 email, phone number, password에서 정규성 검사에 사용
문법
표현 정규식 | 의미 |
^ | 시작 앵커 |
(?=.*[A-Z].*[A-Z]) | 문자열에서 대문자가 2개 있는지 |
(?=.*[!@#$%^]) | 문자열에서 선언한 특수 문자가 존재하는지 |
(?=.*[0-9].*[0-9]) | 문자열에서 숫자가 2개 포함되어 있는지 |
(?=.*[a-z].*[a-z].*[a-z]) | 문자열에서 소문자가 3개 이상 포함되어 있는지 |
.{10} | 문자열의 길이가 10인지 |
& | 끝 앵커 |
이메일 정규식 표현
let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
- @앞에는 대문자, 숫자, 소문자, 특수문자(._%+-)가 포함 가능
- \\. 콤마를 표현하기 위해서 \\사용
- @뒤로는 대문자, 소문자, 숫자 그리고 . 기준으로 맨 마지막 문자가 2~64길이
핸드폰 번호 정규식 표현
let regex = "^01[0-1, 7][0-9]{7,8}$"
- ^ 는 시작 앵커, $ 는 끝 앵커
- 핸드폰 번호는 01로 시작
- 01다음에는 0,1,7 가능
- 그다음에 오는 숫자는 0~9 가능하고 7자리에서 8자리만 가능
패스워드 정규식 표현
let regex = "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+=-]).{8,50}" // 8자리 ~ 50자리 영어+숫자+특수문자
- ^ 첫 앵커, $ 끝 앵커
- (?=.* 로 시작: 조건문
- (?=.*...)(?=.*...)이와 같이 묶인것은 And조건이 아닌 Or조건
- (?=.*[A-Za-z]) 대문자나 소문자 가능
- (?=.*[0-9]) 숫자 가능
일반적인 유효성 검사 예제
import Foundation
func matchesPattern(_ string: String, pattern: String) -> Bool {
do {
let regex = try NSRegularExpression(pattern: pattern)
let range = NSRange(location: 0, length: string.utf16.count)
return regex.firstMatch(in: string, options: [], range: range) != nil
} catch {
print("Invalid regex pattern: \(error.localizedDescription)")
return false
}
}
이메일 주소 유효성 검사
func isValidEmail(_ email: String) -> Bool {
let emailPattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
return matchesPattern(email, pattern: emailPattern)
}
알파벳과 숫자로만 구성된 문자열 검사
func isAlphanumeric(_ string: String) -> Bool {
let pattern = "^[a-zA-Z0-9]+$"
return matchesPattern(string, pattern: pattern)
}
전화번호 유효성 검사 (예: XXX-XXX-XXXX)
func isValidPhoneNumber(_ number: String) -> Bool {
let pattern = "^[0-9]{3}-[0-9]{3}-[0-9]{4}$"
return matchesPattern(number, pattern: pattern)
}
사용 예제:
print(isValidEmail("test@email.com")) // true
print(isValidEmail("test-email")) // false
print(isAlphanumeric("test123")) // true
print(isAlphanumeric("test!@#")) // false
print(isValidPhoneNumber("123-456-7890")) // true
print(isValidPhoneNumber("1234567890")) // false
위의 예제들은 간단한 유효성 검사를 위한 것이므로, 실제 사용 시에는 정규식 패턴을 조금 더 정교하게 만들어야 할 수도 있습니다.
* 더욱 구체적인 개념은 해당 포스팅 글 참고
* Regular Expression과 Predicate를 이용하여 이메일, 핸드폰번호, 패스워드 정규성 확인: https://ios-development.tistory.com/592