27 lines
461 B
Go
27 lines
461 B
Go
package slug
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
DefaultLimit = 80
|
|
)
|
|
|
|
var invalidChars = regexp.MustCompile(`[^a-z0-9]+`)
|
|
|
|
func Normalize(s string) string {
|
|
return NormalizeWithLimit(s, DefaultLimit)
|
|
}
|
|
|
|
func NormalizeWithLimit(s string, limit int) string {
|
|
s = strings.ToLower(strings.TrimSpace(s))
|
|
s = invalidChars.ReplaceAllString(s, "-")
|
|
s = strings.Trim(s, "-")
|
|
if limit > 0 && len(s) > limit {
|
|
s = strings.Trim(s[:limit], "-")
|
|
}
|
|
return s
|
|
}
|