2024. 8. 7. 02:19ㆍApple/Swift
화요일 팀플 회의 때 팀원 분이 앱 출시를 했냐고 물으셨다. 회원가입 쪽은 아직 보수할 부분이 많은데,
다른 팀원 분이 회원가입을 하시면서 회원가입 버튼이 안 눌린다고 했다. 그래서 firebase 콘솔을 살펴보니 같은 메일 주소가 여러번 저장되었고, uid 만 다른 동일 메일이 저장되어 있었다. 설상가상 나는 이메일의 유효성 검사하는 로직을 처리하지 않았다.
에러핸들링이 중요하다고 해주셨기에 한번 살펴봐야겠다는 생각이 들었고 빠른 시일내에 업데이트 할 때 적용해야겠다는 생각도 들었다.
대한민국에서 사용가능한 앱임으로 한국사람들이 많이 쓰는 이메일 도메인을 생각해보자.
naver, kakao, gmail, icloud - 4가지 정도로만 가입이 가능하게 바꾸고 싶다!
(이건 2탄(?)에서 더 구현해봐야겠다.)
네이버: 아이디 영문 소문자, 숫자, 특수기호 _, -
네이버는 어떻게 제한할까 궁금해서, 기존 아이디가 있지만 가입해보기로 했다.
구글 계정 조건: 문자, 숫자, . 마침표 사용가능
그럼 이메일 주소의 형태부터 접근해야겠다.
static func isValidEmail(id: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{3,}"
let emailTest = NSPredicate(format: "SELF MATCHES %@", emailRegEx)
return emailTest.evaluate(with: id)
}
[A-Z0-9a-z._%+-]+
[]: 문자 집합
A-Z, a-z : 대소문자
0-9: 숫자 0~9
특수문자 ._%+-를 허용
+: 앞에 문자 집합 1회 이상 반복
이메일은 @ (at) 을 기준으로 아이디@이메일도메인.com 으로 쓴다.
요즘은 다 .com 으로 쓰니까 .com 아님 .net 일 것 같다.
import Foundation
func isValidEmail(_ email: String) -> Bool {
let emailRegEx = "^[A-Z0-9a-z._%+-]+@(naver\\.com|kakao\\.com|icloud\\.com|gmail\\.com)$"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}
// 예시 테스트
let testEmails = [
"example@naver.com",
"example@kakao.com",
"example@icloud.com",
"example@gmail.com",
"example@yahoo.com"
]
for email in testEmails {
print("\(email): \(isValidEmail(email))")
}
이런식으로 바꿀 수 있을 거 같다.
\\.
- 도메인의 마지막 부분 점(.) 을 나타낸다.
- \\ 는 점(.)을 특수문자가 아닌 일반문자로 취급하기 위한 이스케이프 문자다.
난 .com 만 되게 하고 싶어!! 하면
import Foundation
func isValidEmail(_ email: String) -> Bool {
let emailRegEx = "^[A-Z0-9a-z._%+-]+@(naver\\.com|kakao\\.com|icloud\\.com|gmail\\.com)$"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}
뒤에 저렇게 붙여야한다.
다음엔 이메일 인증 방식에 대해 살펴봐야겠다.
'Apple > Swift' 카테고리의 다른 글
Apple 이 제시하는 콤비네이션 핏자, Combine 살짝 음미해보기 (1) | 2024.12.21 |
---|---|
[ Authentication 개념 ] 사람들의 신분을 증명하는 절차?! (0) | 2024.08.08 |
동시성(Concurrency)을 대하는 Swift 의 자세 1 - DispatchQueue (0) | 2024.02.02 |
Swift 기본 가이드라인 - part 1 (0) | 2023.12.14 |
Macro 에 대해서 알아보자. ( 수정중 ) (0) | 2023.11.12 |