diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go index fb6610221967a673a7e7b029f2627d21196692f9..14d7bcf7567cefbfc452290e0940ec910125667c 100644 --- a/string_utils/string_utils.go +++ b/string_utils/string_utils.go @@ -304,3 +304,10 @@ func StripQueryString(inputUrl string) (string, error) { u.RawQuery = "" 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 +} diff --git a/string_utils/string_utils_test.go b/string_utils/string_utils_test.go new file mode 100644 index 0000000000000000000000000000000000000000..3c52e65fd4ae909cc7a7dda123d7d8d3c4adbca6 --- /dev/null +++ b/string_utils/string_utils_test.go @@ -0,0 +1,37 @@ +package string_utils + +import "testing" + +func TestIsValidEmail(t *testing.T) { + type args struct { + email string + } + tests := []struct { + name string + args args + want bool + }{ + { + name: "valid", + args: args{email: "johandk@uafrica.com"}, + want: true, + }, + { + name: "invalid", + args: args{email: "johandk@@uafrica.com"}, + want: false, + }, + { + name: "invalid", + args: args{email: "johandk@uafricacom"}, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := IsValidEmail(tt.args.email); got != tt.want { + t.Errorf("IsValidEmail() = %v, want %v", got, tt.want) + } + }) + } +}