clawdex/internal/model/normalize.go
2026-05-08 12:25:56 +01:00

53 lines
1.0 KiB
Go

package model
import (
"path/filepath"
"regexp"
"strings"
"unicode"
)
var slugDash = regexp.MustCompile(`-+`)
func Slug(name string) string {
name = strings.TrimSpace(strings.ToLower(name))
var b strings.Builder
for _, r := range name {
switch {
case unicode.IsLetter(r), unicode.IsDigit(r):
b.WriteRune(r)
case unicode.IsSpace(r), r == '-', r == '_', r == '\'', r == '.':
b.WriteByte('-')
}
}
out := strings.Trim(slugDash.ReplaceAllString(b.String(), "-"), "-")
if out == "" {
return "person"
}
return out
}
func NormalizeEmail(email string) string {
return strings.ToLower(strings.TrimSpace(email))
}
func NormalizePhone(phone string) string {
var b strings.Builder
for _, r := range phone {
if r >= '0' && r <= '9' {
b.WriteRune(r)
}
}
out := b.String()
out = strings.TrimPrefix(out, "00")
return out
}
func NormalizeName(name string) string {
return strings.Join(strings.Fields(strings.ToLower(strings.TrimSpace(name))), " ")
}
func PathSlug(path string) string {
return filepath.Base(filepath.Dir(path))
}