From effecf8007507ee2e90e5462ff6ef7dbc8871d3f Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Sat, 16 Feb 2019 00:36:18 -0500 Subject: New functions strings.CamelCase and strings.SnakeCase Signed-off-by: Dave Henderson --- strings/strings.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'strings/strings.go') diff --git a/strings/strings.go b/strings/strings.go index 3ee15c61..8c10865a 100644 --- a/strings/strings.go +++ b/strings/strings.go @@ -1,6 +1,7 @@ package strings import ( + "regexp" "sort" "strings" ) @@ -45,3 +46,38 @@ func Sort(list []string) []string { sorted.Sort() return sorted } + +var ( + spaces = regexp.MustCompile(`\s+`) + nonAlphaNum = regexp.MustCompile(`[^\pL\pN]+`) +) + +// SnakeCase - +func SnakeCase(in string) string { + s := casePrepare(in) + return spaces.ReplaceAllString(s, "_") +} + +// KebabCase - +func KebabCase(in string) string { + s := casePrepare(in) + return spaces.ReplaceAllString(s, "-") +} + +func casePrepare(in string) string { + in = strings.TrimSpace(in) + s := strings.ToLower(in) + // make sure the first letter remains lower- or upper-cased + s = strings.Replace(s, string(s[0]), string(in[0]), 1) + s = nonAlphaNum.ReplaceAllString(s, " ") + return strings.TrimSpace(s) +} + +// CamelCase - +func CamelCase(in string) string { + in = strings.TrimSpace(in) + s := strings.Title(in) + // make sure the first letter remains lower- or upper-cased + s = strings.Replace(s, string(s[0]), string(in[0]), 1) + return nonAlphaNum.ReplaceAllString(s, "") +} -- cgit v1.2.3