Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift에서 이메일과 전화번호 유효성 검사하는 방법

Swift에서 이메일과 전화번호 유효성 검사하기

Swift로 앱을 개발하다 보면 사용자가 입력한 이메일 주소나 전화번호가 올바른 형식인지 확인해야 하는 경우가 자주 있습니다. 여러 개의 if 조건문을 나열해 검증할 수도 있지만, 이메일 하나만 제대로 검사하려면 수십 개에서 많게는 50~100개에 달하는 조건문이 필요할 수 있어 매우 비효율적입니다.

이럴 때 가장 효과적인 방법은 정규 표현식(Regular Expression)을 활용하는 것입니다. Swift는 NSPredicate를 기본적으로 제공하며, 이를 사용하면 정규 표현식을 평가해 문자열의 유효성을 간편하게 검사할 수 있습니다.

String 확장(Extension)으로 유효성 검사 구현하기

프로젝트 전반에서 어디서든 재사용할 수 있도록 String 클래스의 확장(Extension) 형태로 구현해 보겠습니다. 아래 코드를 프로젝트 내 아무 클래스에 추가하거나, 별도의 Swift 파일을 생성해 확장으로 등록하면 됩니다.

extension String {
   var isValidEmail: Bool {
      let regularExpressionForEmail = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
      let testEmail = NSPredicate(format:"SELF MATCHES %@", regularExpressionForEmail)
      return testEmail.evaluate(with: self)
   }
   var isValidPhone: Bool {
      let regularExpressionForPhone = "^\\d{3}-\\d{3}-\\d{4}$"
      let testPhone = NSPredicate(format:"SELF MATCHES %@", regularExpressionForPhone)
      return testPhone.evaluate(with: self)
   }
}

위 코드에서 isValidEmail은 일반적인 이메일 형식(아이디@도메인)을 검사하고, isValidPhone은 '000-000-0000' 형태의 전화번호를 검사합니다. 필요에 따라 정규 표현식 패턴만 수정하면 다양한 형식에 대응할 수 있습니다.

실제 사용 예시

이렇게 만든 확장 프로퍼티는 다음과 같이 문자열에서 바로 호출해 사용할 수 있습니다.

override func viewDidLoad() {
   super.viewDidLoad()
   print("11f".isValidEmail)
   print("abc@xuyz.com".isValidEmail)
   print("8892".isValidPhone)
   print("998-877-2211".isValidPhone)
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

false
true
false
true

결과를 살펴보면 "11f"는 이메일 형식이 아니므로 false, "abc@xuyz.com"은 올바른 이메일 형식이므로 true가 출력됩니다. 마찬가지로 "8892"는 지정된 전화번호 형식에 맞지 않아 false, "998-877-2211"은 형식에 부합하여 true가 출력됩니다.

이처럼 정규 표현식과 NSPredicate를 조합하면 길고 복잡한 조건문 없이도 깔끔하고 유지보수하기 쉬운 방식으로 입력값 검증을 처리할 수 있습니다.