Riy*_*han 14 email email-validation go
我检查了 StackOverflow 并找不到任何可以回答如何在 Go Language 中验证电子邮件的问题。
经过一番研究,我想出了并根据我的需要解决了它。
我有这个正则表达式和Go 函数,它工作正常:
import (
"fmt"
"regexp"
)
func main() {
fmt.Println(isEmailValid("test44@gmail.com")) // true
fmt.Println(isEmailValid("test$@gmail.com")) // true -- expected "false"
}
// isEmailValid checks if the email provided is valid by regex.
func isEmailValid(e string) bool {
emailRegex := 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])?)*$")
return emailRegex.MatchString(e)
}
Run Code Online (Sandbox Code Playgroud)
问题是它接受了我不想要的特殊字符。我尝试使用一些来自其他语言的“正则表达式”表达式,但它在调试中抛出错误“未知转义”。
谁能给我一个很好的正则表达式或任何适用于 GoLang 的快速解决方案 (pkg)?
icz*_*cza 24
标准库内置了电子邮件解析和验证,只需使用:mail.ParseAddress()。
一个简单的“有效”测试:
func valid(email string) bool {
_, err := mail.ParseAddress(email)
return err == nil
}
Run Code Online (Sandbox Code Playgroud)
测试它:
for _, email := range []string{
"good@exmaple.com",
"bad-example",
} {
fmt.Printf("%18s valid: %t\n", email, valid(email))
}
Run Code Online (Sandbox Code Playgroud)
哪些输出(在Go Playground上试试):
good@exmaple.com valid: true
bad-example valid: false
Run Code Online (Sandbox Code Playgroud)
Riy*_*han 16
@icza 的上述方法很好,但是,如果我们在登录/注册表单验证中使用它,很多人会输入部分或不正确的电子邮件地址,这将在生产中创建一堆无效记录。而且,谁知道我们会因此而被杀。
因此,我使用正则表达式解决方案来验证标准电子邮件:
这是代码:
func isEmailValid(e string) bool {
emailRegex := regexp.MustCompile(`^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,4}$`)
return emailRegex.MatchString(e)
}
Run Code Online (Sandbox Code Playgroud)
测试用例:
fmt.Println(isEmailValid("test44@gmail.com")) // true
fmt.Println(isEmailValid("bad-email")) // false
fmt.Println(isEmailValid("test44$@gmail.com")) // false
fmt.Println(isEmailValid("test-email.com")) // false
fmt.Println(isEmailValid("test+email@test.com")) // true
Run Code Online (Sandbox Code Playgroud)