Merge pull request #205 from knadh/fix-email-validation

fix: use mail.ParseAddress to validate email instead of custom regex
This commit is contained in:
Kailash Nadh 2020-10-17 21:35:50 +05:30 committed by GitHub
commit 669cb09a83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 4 deletions

View File

@ -17,6 +17,7 @@ import (
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
"net/mail"
"os" "os"
"regexp" "regexp"
"strings" "strings"
@ -109,9 +110,6 @@ var (
"name": true, "name": true,
"attributes": true} "attributes": true}
// https://www.alexedwards.net/blog/validation-snippets-for-go#email-validation
regexEmail = 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])?)*$")
regexCleanStr = regexp.MustCompile("[[:^ascii:]]") regexCleanStr = regexp.MustCompile("[[:^ascii:]]")
) )
@ -619,5 +617,11 @@ func countLines(r io.Reader) (int, error) {
// IsEmail checks whether the given string is a valid e-mail address. // IsEmail checks whether the given string is a valid e-mail address.
func IsEmail(email string) bool { func IsEmail(email string) bool {
return regexEmail.MatchString(email) // Since `mail.ParseAddress` parses an email address which can also contain optional name component
// here we check if incoming email string is same as the parsed email.Address. So this eliminates
// any valid email address with name and also valid address with empty name like `<abc@example.com>`.
if em, err := mail.ParseAddress(email); err != nil || em.Address != email {
return false
}
return true
} }