GoLang 电子邮件验证器
本篇文章介绍如何在 Go 语言中验证电子邮件。
电子邮件需要特定格式; 否则,它们将无法工作。 这就是为什么在构建电子邮件系统时电子邮件验证很重要。 本教程演示了在 GoLang 中验证电子邮件的不同方法。 **
使用正则表达式创建一个 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
正则表达式电子邮件模式:
^[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])?)*$
使用邮件 API 创建 Go 语言电子邮件验证器
Go 语言的邮件 API 有一个方法 mail.ParseAddress 用于电子邮件验证。 此函数解析 RFC 5322 地址,我们还可以使用名称 <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",
"Jiyik <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: Jiyik <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
相关文章
在 Golang 中使用 If-Else 和 Switch Loop Inside HTML 模板
发布时间:2023/04/27 浏览次数:65 分类:Go
-
本篇文章介绍了在 Golang 的 HTML 模板中使用 if-else 和 switch 循环。因此,只要输出是 HTML,就应该始终使用 HTML 模板包而不是文本模板。
Golang 中的零值 Nil
发布时间:2023/04/27 浏览次数:166 分类:Go
-
本篇文章介绍 nil 在 Golang 中的含义,nil 是 Go 编程语言中的零值,是众所周知且重要的预定义标识符。
Golang 中的 Lambda 表达式
发布时间:2023/04/27 浏览次数:93 分类:Go
-
本篇文章介绍如何在 Golang 中创建 lambda 表达式。Lambda 表达式似乎不存在于 Golang 中。 函数文字、lambda 函数或闭包是匿名函数的另一个名称。
在 Go 中捕获 Panics
发布时间:2023/04/27 浏览次数:66 分类:Go
-
像错误一样,Panic 发生在运行时。 换句话说,当您的 Go 程序中出现意外情况导致执行终止时,就会发生 Panics。让我们看一些例子来捕捉 Golang 中的Panics。
在 Go 中使用断言
发布时间:2023/04/27 浏览次数:181 分类:Go
-
本篇文章介绍了 assert 在 GoLang 中的使用。在 Go 语言中使用断言:GoLang 不提供对断言的任何内置支持,但我们可以使用来自 Testify API 的广泛使用的第三方包断言。
Go 中的随机数生成
发布时间:2023/04/27 浏览次数:114 分类:Go
-
本篇文章介绍如何在 Go 语言中使用随机数生成功能。Go 中的随机数生成 Go 语言为随机数生成功能提供内置支持。 内置包 math 有方法 rand(),用于随机数生成。