Select Git revision
string_utils.go
-
Jano Hendriks authoredJano Hendriks authored
string_utils.go 7.39 KiB
package string_utils
import (
"encoding/json"
"fmt"
"net/url"
"regexp"
"strconv"
"strings"
"unicode"
"github.com/thoas/go-funk"
"golang.org/x/text/runes"
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"
)
const snakeCasePattern = `[a-z]([a-z0-9_]*[a-z0-9])*`
var snakeCaseRegex = regexp.MustCompile("^" + snakeCasePattern + "$")
func IsSnakeCase(name string) bool {
return snakeCaseRegex.MatchString(name)
}
func SnakeToKebabString(s string) string {
s = strings.TrimSpace(s)
re := regexp.MustCompile("(_)")
s = re.ReplaceAllString(s, "-")
return s
}
// ReplaceNonSpacingMarks removes diacritics e.g. êžů becomes ezu
func ReplaceNonSpacingMarks(str string) string {
t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) // Mn: non-spacing marks
result, _, _ := transform.String(t, str)
return result
}
func RemoveAllWhiteSpaces(s string) string {
return strings.ReplaceAll(strings.ReplaceAll(s, " ", ""), "\t", "")
}
func ReplaceCaseInsensitive(string, toReplace, replaceWith string) string {
regex := regexp.MustCompile("(?i)" + strings.ToLower(toReplace))
return regex.ReplaceAllString(string, replaceWith)
}
// TrimQuotes - trims quotes from a string (ie: "foo" will return foo)
func TrimQuotes(stringToTrim string) string {
if len(stringToTrim) >= 2 {
if stringToTrim[0] == '"' && stringToTrim[len(stringToTrim)-1] == '"' {
return stringToTrim[1 : len(stringToTrim)-1]
}
}
return stringToTrim
}
// IsNumericString returns true if the string can be converted to a float without error
func IsNumericString(s string) bool {
_, err := strconv.ParseFloat(s, 64)
return err == nil
}
// StandardisePhoneNumber standardises phone numbers with +27 instead of 0 prefix
func StandardisePhoneNumber(number string) string {
// is the first rune/char of the string a 0