Files
api_tmpl/internal/val/validator.go
2026-01-08 01:15:07 +00:00

73 lines
1.5 KiB
Go

package val
import (
"fmt"
"net/mail"
"regexp"
)
var (
isValidUsername = regexp.MustCompile(`^[a-zA-Z0-9_]+$`).MatchString
isValidFullName = regexp.MustCompile(`^[a-zA-Z\s]+$`).MatchString
)
func ValidateString(val string, minLength int, maxLength int) error {
n := len(val)
if n < minLength || n > maxLength {
return fmt.Errorf("string length must be between %d and %d characters", minLength, maxLength)
}
return nil
}
func ValidateUsername(val string) error {
err := ValidateString(val, 3, 100)
if err != nil {
return fmt.Errorf("invalid username: %v", err)
}
if !isValidUsername(val) {
return fmt.Errorf("username can only contain lowercase alphanumeric characters and underscores")
}
return nil
}
func ValidateFullName(val string) error {
err := ValidateString(val, 3, 100)
if err != nil {
return fmt.Errorf("invalid full name: %v", err)
}
if !isValidFullName(val) {
return fmt.Errorf("full name can only contain alphabetic characters and spaces")
}
return nil
}
func ValidatePassword(val string) error {
return ValidateString(val, 6, 100)
}
func ValidateEmail(val string) error {
err := ValidateString(val, 3, 200)
if err != nil {
return fmt.Errorf("invalid username: %v", err)
}
if _, err := mail.ParseAddress(val); err != nil {
return fmt.Errorf("is not a valid email address")
}
return nil
}
func ValidateEmailID(val int64) error {
if val <= 0 {
return fmt.Errorf("email ID must be a positive integer")
}
return nil
}
func ValidateVerificationCode(val string) error {
return ValidateString(val, 32, 128)
}