Skip to content
Snippets Groups Projects
Select Git revision
  • 8ed5cbdd47fb1159a6a3113b4e4b3c19ad010ecd
  • main default protected
  • v1.298.0
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
22 results

string_utils.go

Blame
  • string_utils.go 2.20 KiB
    package string_utils
    
    import (
    	"golang.org/x/text/runes"
    	"golang.org/x/text/transform"
    	"golang.org/x/text/unicode/norm"
    	"regexp"
    	"strconv"
    	"strings"
    	"unicode"
    )
    
    // 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
    }
    
    // Standardise phone numbers with +27 instead of 0 prefix
    func StandardisePhoneNumber(number string) string {
    	// is the first rune/char of the string a 0
    	if []rune(number)[0] == []rune("0")[0] {
    		// Add south african country code (hardcoded for now)
    		number = "+27" + number[1:len(number)]
    	}
    	return number
    }
    
    func FormatPhoneNumber(phoneNumber string) string {
    	if len(phoneNumber) > 7 {
    		return phoneNumber
    	}
    
    	// Format as 076 453 2188
    	phoneNumber = insertInto(phoneNumber, 3, " ")
    	phoneNumber = insertInto(phoneNumber, 7, " ")
    	return phoneNumber
    }
    
    func insertInto(s string, index int, characters string) string {
    	return s[:index] + characters + s[index:]
    }
    
    func IsAlphaNumeric(str string) bool {
    	regex := regexp.MustCompile("^[a-zA-Z0-9]*$")
    	return regex.MatchString(str)
    }
    
    func Equal(a string, b string) bool {
    	return strings.TrimSpace(strings.ToLower(a)) == strings.TrimSpace(strings.ToLower(b))
    }
    
    func UnwrapString(s *string) string {
    	if s == nil {
    		return ""
    	}
    	return *s
    }