diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go index 67bd3de4a71ef1ccdaa526bcc175ef2805841112..95e9b5eb4e1a2435a71db2d1b93d780c3b8daca0 100644 --- a/string_utils/string_utils.go +++ b/string_utils/string_utils.go @@ -3,6 +3,8 @@ package string_utils import ( "encoding/json" "fmt" + "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors" + "net/mail" "net/url" "regexp" "strconv" @@ -307,11 +309,18 @@ func StripQueryString(inputUrl string) (string, error) { return u.String(), nil } -func IsValidEmail(email string) bool { - // Found here: https://stackoverflow.com/questions/201323/how-can-i-validate-an-email-address-using-a-regular-expression - regex, _ := regexp.Compile("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])") - isValidEmail := regex.MatchString(email) - return isValidEmail +func ValidateEmailAddress(email string) (string, error) { + if email == "" { + return "", errors.Error("email address is empty") + } + + // We validate it but still return it since in some cases we don't want to break everything if the email is bad + _, err := mail.ParseAddress(email) + if err != nil { + return strings.ToLower(strings.TrimSpace(email)), errors.Wrap(err, "could not parse email address") + } + + return strings.ToLower(strings.TrimSpace(email)), nil } func PascalCaseToSentence(pascal string) string {