GoLang 이메일 검사기

Sheeraz Gul 2023년6월20일
  1. Regex를 사용하여 GoLang 이메일 검사기 만들기
  2. Mail API를 사용하여 GoLang 이메일 검사기 만들기
  3. GoLang 이메일 검사기용 방법 만들기
GoLang 이메일 검사기

이 튜토리얼은 GoLang에서 이메일을 검증하는 방법을 보여줍니다.

이메일에는 특정 형식이 필요합니다. 그렇지 않으면 작동하지 않습니다. 그렇기 때문에 이메일 시스템을 구축할 때 이메일 유효성 검사가 중요합니다. 이 튜토리얼은 GoLang에서 이메일을 검증하는 다양한 방법을 보여줍니다.

Regex를 사용하여 GoLang 이메일 검사기 만들기

정규식은 다양한 프로그래밍 언어에 대한 다양한 형식의 유효성을 검사하는 데 사용됩니다. GoLang은 또한 다양한 형식의 유효성을 검사하고 이메일 유효성 검사에 사용할 수 있는 regexp 패키지를 제공합니다.

예를 들어 보겠습니다.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    string1 := "delftstack.123@hotmail.com"
    string2 := "demo@delftstack.com"
    string3 := "demo@delftstack.tv"
    string4 := "demohotmail.com"
    string5 := "demo@"

    // regex pattern for email ^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
    RegexPattern := regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$")

    fmt.Printf("Email 1: %v :%v\n", string1, RegexPattern.MatchString(string1))
    fmt.Printf("Email 2: %v :%v\n", string2, RegexPattern.MatchString(string2))
    fmt.Printf("Email 3: %v :%v\n", string3, RegexPattern.MatchString(string3))
    fmt.Printf("Email 4: %v :%v\n", string4, RegexPattern.MatchString(string4))
    fmt.Printf("Email 5: %v :%v\n", string5, RegexPattern.MatchString(string5))
    fmt.Printf("\nThe regex email pattern: %v\n", RegexPattern.String())

}

위의 코드는 Go 언어의 regexp 패키지를 사용하는 정규식을 기반으로 이메일의 유효성을 검사합니다. 위 코드의 출력을 참조하십시오.

Email 1: delftstack.123@hotmail.com :true
Email 2: demo@delftstack.com :true
Email 3: demo@delftstack.tv :true
Email 4: demohotmail.com :false
Email 5: demo@ :false

The regex email pattern: ^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$

Mail API를 사용하여 GoLang 이메일 검사기 만들기

GoLang의 mail API에는 이메일 유효성 검사에 사용되는 mail.ParseAddress 메서드가 있습니다. 이 함수는 RFC 5322 주소를 구문 분석하고 name <local-part@domain> 형식을 사용하여 문자열이 이메일인지 확인할 수도 있습니다.

mail.ParseAddress 메서드를 사용하여 이메일 유효성 검사기를 구현하는 방법을 살펴보겠습니다.

package main

import (
    "fmt"
    "net/mail"
)

func EmailValidator(EmailAddress string) (string, bool) {
    a, b := mail.ParseAddress(EmailAddress)
    if b != nil {
        return "", false
    }
    return a.Address, true
}

var EmailAddresses = []string{
    "delftstack.123@hotmail.com",
    "Delftstack <demo@delftstack.com>",
    "demo@delftstack.tv",
    "demohotmail.com",
    "demo@",
}

func main() {
    for _, e_address := range EmailAddresses {
        if emailaddress, ok := EmailValidator(e_address); ok {
            fmt.Printf("The Input: %-30s Valadity: %-10t Email Address: %s\n", e_address, ok, emailaddress)
        } else {
            fmt.Printf("The Input: %-30s Valadity: %-10t\n", e_address, ok)
        }
    }
}

위의 코드는 mail.ParseAddress 메소드를 사용하여 EmailValidator 기능을 생성합니다. 이 코드는 이메일 배열의 유효성 검사를 확인합니다.

출력을 참조하십시오.

The Input: delftstack.123@hotmail.com     Valadity: true       Email Address: delftstack.123@hotmail.com
The Input: Delftstack <demo@delftstack.com> Valadity: true       Email Address: demo@delftstack.com
The Input: demo@delftstack.tv             Valadity: true       Email Address: demo@delftstack.tv
The Input: demohotmail.com                Valadity: false
The Input: demo@                          Valadity: false

GoLang 이메일 검사기용 방법 만들기

정규식을 찾기 어렵거나 패키지를 로드하는 데 모호성이 있다고 가정합니다. 이 경우 GoLang 코드를 기반으로 메서드를 생성하여 표준 형식을 기반으로 이메일을 검증할 수도 있습니다.

다음은 예입니다.

package main

import (
    "fmt"
    "strings"
    "unicode"
)

func EmailValidator(emailaddress string) bool {
    if emailaddress == "" {
        return false
    }
    if CheckSpace(emailaddress) {
        return false
    }

    AttheRate := strings.IndexByte(emailaddress, '@')
    if AttheRate == -1 {
        return false
    }

    localPart := emailaddress[:AttheRate]
    if localPart == "" {
        return false
    }

    DomainCheck := emailaddress[AttheRate+1:]
    if DomainCheck == "" {
        return false
    }

    LastDot := strings.IndexByte(DomainCheck, '.')
    if LastDot == -1 || LastDot == 0 || LastDot == len(DomainCheck)-1 {
        return false
    }

    if strings.Index(DomainCheck, "..") != -1 {
        return false
    }

    AfterDot := strings.LastIndexByte(DomainCheck, '.')
    return 2 <= len([]rune(DomainCheck[AfterDot+1:]))
}

func CheckSpace(emailaddress string) bool {
    for _, a := range emailaddress {
        if unicode.IsSpace(a) {
            return true
        }
    }
    return false
}

func main() {
    string1 := "delftstack.123@hotmail.com"
    string2 := "demo@delftstack.com"
    string3 := "demo@delftstack.tv"
    string4 := "demohotmail.com"
    string5 := "demo@"

    fmt.Printf("Email 1: %v :%v\n", string1, EmailValidator(string1))
    fmt.Printf("Email 2: %v :%v\n", string2, EmailValidator(string2))
    fmt.Printf("Email 3: %v :%v\n", string3, EmailValidator(string3))
    fmt.Printf("Email 4: %v :%v\n", string4, EmailValidator(string4))
    fmt.Printf("Email 5: %v :%v\n", string5, EmailValidator(string5))

}

위의 코드는 전자 메일 유효성 검사를 확인하기 위해 GoLang 코드를 기반으로 하는 메서드를 생성합니다. 출력을 보자:

Email 1: delftstack.123@hotmail.com :true
Email 2: demo@delftstack.com :true
Email 3: demo@delftstack.tv :true
Email 4: demohotmail.com :false
Email 5: demo@ :false
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook