Validador de correo electrónico de GoLang

Sheeraz Gul 20 junio 2023
  1. Use Regex para crear un validador de correo electrónico de GoLang
  2. Utilice la API de correo para crear un validador de correo electrónico de GoLang
  3. Crear un método para un validador de correo electrónico de GoLang
Validador de correo electrónico de GoLang

Este tutorial demuestra cómo validar un correo electrónico en GoLang.

Los correos electrónicos requieren un formato particular; de lo contrario, no funcionarán. Es por eso que la validación de correo electrónico es importante al construir un sistema de correo electrónico. Este tutorial demuestra diferentes métodos para validar un correo electrónico en GoLang.

Use Regex para crear un validador de correo electrónico de GoLang

El regex se usa para validar diferentes formatos para diferentes lenguajes de programación. GoLang también proporciona un paquete regexp para validar diferentes formatos y puede usarse para la validación de correo electrónico.

Probemos un ejemplo:

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())

}

El código anterior validará el correo electrónico en función de la expresión regular utilizando el paquete regexp del lenguaje Go. Vea la salida para el código anterior:

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])?)*$

Utilice la API de correo para crear un validador de correo electrónico de GoLang

La API de correo de GoLang tiene un método mail.ParseAddress utilizado para la validación de correo electrónico. Esta función analiza la dirección RFC 5322, y también podemos verificar si una cadena es un correo electrónico utilizando el formato nombre <local-part@domain>.

Veamos cómo implementar un validador de correo electrónico utilizando el método 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)
        }
    }
}

El código anterior crea una función como EmailValidator utilizando el método mail.ParseAddress. El código comprueba la validación de una serie de correos electrónicos.

Ver la salida:

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

Crear un método para un validador de correo electrónico de GoLang

Suponga que encuentra difícil la expresión regular o tiene ambigüedad al cargar paquetes. En ese caso, también puede crear un método basado en el código GoLang para validar un correo electrónico según el formato estándar.

Aquí hay un ejemplo:

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))

}

El código anterior crea un método basado puramente en el código GoLang para verificar la validación del correo electrónico. Veamos la salida:

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 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