Skip to content

Commit

Permalink
Treat numbers as word boundaries
Browse files Browse the repository at this point in the history
  • Loading branch information
iancoleman committed Nov 29, 2017
1 parent e1e131f commit 30c986a
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 0 deletions.
4 changes: 4 additions & 0 deletions camel.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ import (

// Converts a string to CamelCase
func toCamelInitCase(s string, initCase bool) string {
s = addWordBoundariesToNumbers(s)
s = strings.Trim(s, " ")
n := ""
capNext := initCase
for _, v := range s {
if v >= 'A' && v <= 'Z' {
n += string(v)
}
if v >= '0' && v <= '9' {
n += string(v)
}
if v >= 'a' && v <= 'z' {
if capNext {
n += strings.ToUpper(string(v))
Expand Down
1 change: 1 addition & 0 deletions camel_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ func TestToCamel(t *testing.T) {
[]string{ "many_many_words", "ManyManyWords" },
[]string{ "AnyKind of_string", "AnyKindOfString" },
[]string{ "odd-fix", "OddFix" },
[]string{ "numbers2And55with000", "Numbers2And55With000" },
}
for _, i := range cases {
in := i[0]
Expand Down
14 changes: 14 additions & 0 deletions numbers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package strcase

import (
"regexp"
)

var numberSequence = regexp.MustCompile(`([a-zA-Z])(\d+)([a-zA-Z]?)`)
var numberReplacement = []byte(`$1 $2 $3`)

func addWordBoundariesToNumbers(s string) string {
b := []byte(s)
b = numberSequence.ReplaceAll(b, numberReplacement)
return string(b)
}
1 change: 1 addition & 0 deletions snake.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

// Converts a string to snake_case
func ToSnake(s string) string {
s = addWordBoundariesToNumbers(s)
s = strings.Trim(s, " ")
n := ""
for i, v := range s {
Expand Down
1 change: 1 addition & 0 deletions snake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ func TestToSnake(t *testing.T) {
[]string{ "ManyManyWords", "many_many_words" },
[]string{ "manyManyWords", "many_many_words" },
[]string{ "AnyKind of_string", "any_kind_of_string" },
[]string{ "numbers2and55with000", "numbers_2_and_55_with_000" },
}
for _, i := range cases {
in := i[0]
Expand Down

0 comments on commit 30c986a

Please sign in to comment.