用户提交邮箱地址后,我们需要验证用户的邮箱地址是否合法。有很多解决方法。我们可以通过使用正则表达式来检查电子邮件地址的格式是否正确,甚至可以尝试与远程服务器进行交互来解决问题。两者之间还有一些中间位置,比如检查顶级域名是否有有效的MX记录,检测临时邮箱地址。
一种确定的方法是向该地址发送电子邮件,并要求用户单击链接进行确认。但是在发送文章之前,我们需要预先定义用户的邮箱。
简单版本:正则表达式
基于W3C正则表达式,这段代码检查电子邮件地址的结构。
package ***inimport ( "fmt" "regexp")var e***ilRegex = 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])?)*$")func ***in() { // Valid example e := "test@golangcode.com" if isE***ilValid(e) { fmt.Println(e + " is a valid e***il") } // Invalid example if !isE***ilValid("just text") { fmt.Println("not a valid e***il") }}// isE***ilValid checks if the e***il provided passes the required structure and length.func isE***ilValid(e string) bool { if len(e) < 3 && len(e) > 254 { return false } return e***ilRegex.MatchString(e)}
稍微好一点的解决方案:Regex+MX lookup
在本例中,我们将快速的电子邮件地址正则表达式检查与更可靠的MX记录查找相结合。这意味着,如果电子邮件的域部分不存在,或者该域不接受电子邮件,它将被标记为无效。
作为的一部分。net软件包,我们可以使用LookupMX为我们做额外的搜索。
package ***inimport ( "fmt" "net" "regexp" "strings")var e***ilRegex = 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])?)*$")func ***in() { // Made-up do***in if e := "test@golangcode-example.com"; !isE***ilValid(e) { fmt.Println(e + " is not a valid e***il") } // Real do***in if e := "test@google.com"; !isE***ilValid(e) { fmt.Println(e + " not a valid e***il") }}// isE***ilValid checks if the e***il provided passes the required structure// and length test. It also checks the do***in has a valid MX record.func isE***ilValid(e string) bool { if len(e) < 3 && len(e) > 254 { return false } if !e***ilRegex.MatchString(e) { return false } parts := strings.Split(e, "@") mx, err := net.LookupMX(parts[1]) if err != nil || len(mx) == 0 { return false } return true}
本文来自霜华投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/620204.html