53 lines
1.0 KiB
Go
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))
|
|
}
|