카테고리 없음

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