diff options
| author | Dave Henderson <dhenderson@gmail.com> | 2019-02-16 00:36:18 -0500 |
|---|---|---|
| committer | Dave Henderson <dhenderson@gmail.com> | 2019-02-16 11:11:08 -0500 |
| commit | effecf8007507ee2e90e5462ff6ef7dbc8871d3f (patch) | |
| tree | 8f5a2ea446e1c3daaa05e4acbac62756786ba33a /strings/strings.go | |
| parent | ffb7d693baa8f95df96484e9b1a9c6267be066cf (diff) | |
New functions strings.CamelCase and strings.SnakeCase
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'strings/strings.go')
| -rw-r--r-- | strings/strings.go | 36 |
1 files changed, 36 insertions, 0 deletions
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, "") +} |
