summaryrefslogtreecommitdiff
path: root/strings/strings.go
diff options
context:
space:
mode:
Diffstat (limited to 'strings/strings.go')
-rw-r--r--strings/strings.go36
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, "")
+}