package slug import ( "errors" "github.com/gosimple/unidecode" "regexp" "strings" ) type Slug string var ( ErrInvalidSlug = errors.New("invalid slug") regexpNonAuthorizedChars = regexp.MustCompile("[^a-zA-Z0-9-_]") regexpMultipleDashes = regexp.MustCompile("-+") ) func New(s string) Slug { s = unidecode.Unidecode(s) s = strings.ToLower(s) s = regexpNonAuthorizedChars.ReplaceAllString(s, "-") s = regexpMultipleDashes.ReplaceAllString(s, "-") s = strings.Trim(s, "-_") return Slug(s) } func NewString(s string) string { return New(s).String() } func Validate(s string) error { if s == "" { return ErrInvalidSlug } if s == NewString(s) { return nil } return ErrInvalidSlug } func (s Slug) String() string { return string(s) }