【问题标题】:finding, parsing and validating email addresses查找、解析和验证电子邮件地址
【发布时间】:2022-11-02 01:39:32
【问题描述】:
 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 和 TLD:com

如何指示从某个字符串到某个字符串的循环?

【问题讨论】:

  • 最好使用已经知道如何正确解析电子邮件地址的库,而不是尝试重新发明轮子。顺便说一句,您应该避免在循环中附加到字符串,因为它对性能不利(尤其是如果输入是由潜在的恶意用户提供的)。见strings.Builder
  • 不过,这个问题还不清楚。您是否尝试从电子邮件地址的域中提取 eTLD?
  • 如果是这样,那么您的小巷里就有一个golang.org/x/net.publicsuffix package。唯一的缺点是它不经常更新,并且不能跟上公共后缀列表中的变化。 go.dev/play/p/ry8sONLNI1Q

标签: go


【解决方案1】:

使用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 并使用一个来分隔字符串

    email := "learning@gmail.com"
    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])

strings.SplitN

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

??PLAYGROUND??

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2014-06-12
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2011-09-02
    • 2013-02-20
    相关资源
    最近更新 更多