Go语言 查找、解析和验证电子邮件地址

ttp71kqs  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(434)
import "fmt"

func main() {
    email := "learning@gmail.com"
    atTrue := false
    s := ""
    for i := 0; i < len(email); i++ {
        if atTrue {
            s += string(email[i])
        }
        if string(email[i]) == "@" {
            atTrue = true
        }
    }
    fmt.Println(s)
}

电流输出:gmail.com
预期输出:域名:gmail和顶级域名:com
如何表示从某个字符串循环到某个字符串?

jfgube3f

jfgube3f1#

使用strings.Split函数

email := "learning@gmail.com"
    split := strings.Split(email, "@")
    split = strings.Split(split[1], ".")
    fmt.Println("Domain:", split[0])
    fmt.Println("TLD:", split[1])

或者,您可以使用mail.ParseAddress函数验证电子邮件字符串

email := "learning@gmail.com"
    addr, err := mail.ParseAddress(email)
    if err != nil {
        log.Fatal(err)
    }

如果TLD类似于co.id,输出是否仍为co.id?- @zacharyy
只需尝试找到.(strings.Index)的第一个index,并使用1分隔字符串

email := "learning@gmail.co.id"
    split := strings.Split(email, "@")
    index := strings.Index(split[1], ".")
    fmt.Println("Domain:", split[1][:index])
    fmt.Println("TLD:", split[1][index+1:])

或者使用regexp.Split函数

email := "learning@gmail.co.id"
    split := strings.Split(email, "@")
    split = regexp.MustCompile("[.]").
        Split(split[1], 2)
    fmt.Println("Domain:", split[0])
    fmt.Println("TLD:", split[1])

或字符串。SplitN

email := "learning@gmail.co.id"
    split := strings.Split(email, "@")
    split = strings.SplitN(split[1], ".", 2)
    fmt.Println("Domain:", split[0])
    fmt.Println("TLD:", split[1])

或弦。切

_, host, found := strings.Cut(email, "@")
    if !found {
        t.Fatal("fail cut to host (Domain + TLD)")
    }
    domain, tld, found := strings.Cut(host, ".")
    if !found {
        t.Fatal("fail cut to Domain and TLD")
    }
    fmt.Println("Domain:", domain)
    fmt.Println("TLD:", tld)

👉🏻 PLAYGROUND👈🏻

性能指标评测

第一个

相关问题