mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-19 00:01:14 +00:00
70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
package validate
|
|
|
|
import (
|
|
"net/mail"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/warmbly/warmbly/internal/errx"
|
|
)
|
|
|
|
func Email(email string) bool {
|
|
_, err := mail.ParseAddress(email)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func EmailBulk(emails []string) bool {
|
|
for i := range emails {
|
|
if !Email(emails[i]) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
var nameRE = regexp.MustCompile(`^\p{L}[\p{L}\p{M}\p{N}'\-\.\s]{0,98}\p{L}$`)
|
|
|
|
func EmailName(name *string) bool {
|
|
*name = strings.TrimSpace(*name)
|
|
if *name == "" {
|
|
return false
|
|
}
|
|
runes := []rune(*name)
|
|
if len(runes) < 2 {
|
|
return false
|
|
}
|
|
if len(runes) > 100 {
|
|
return false
|
|
}
|
|
if !nameRE.MatchString(*name) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func ValidateTrackingDomain(domain string) *errx.Error {
|
|
if domain == "" {
|
|
return errx.ErrEmailTrackingDomain
|
|
}
|
|
if len(domain) > 253 {
|
|
return errx.ErrEmailTrackingDomainLength
|
|
}
|
|
|
|
domain = strings.ToLower(domain)
|
|
|
|
domainRegex := regexp.MustCompile(`^([a-z0-9-]+\.)+[a-z]{2,}$`)
|
|
|
|
if !domainRegex.MatchString(domain) {
|
|
return errx.ErrEmailTrackingDomain
|
|
}
|
|
|
|
if strings.HasPrefix(domain, "-") || strings.HasSuffix(domain, "-") {
|
|
return errx.ErrEmailTrackingDomain
|
|
}
|
|
|
|
return nil
|
|
}
|