* feat: kubesphere 4.0 Signed-off-by: ci-bot <ci-bot@kubesphere.io> * feat: kubesphere 4.0 Signed-off-by: ci-bot <ci-bot@kubesphere.io> --------- Signed-off-by: ci-bot <ci-bot@kubesphere.io> Co-authored-by: ks-ci-bot <ks-ci-bot@example.com> Co-authored-by: joyceliu <joyceliu@yunify.com>
94 lines
1.8 KiB
Go
94 lines
1.8 KiB
Go
/*
|
|
* Please refer to the LICENSE file in the root directory of the project.
|
|
* https://github.com/kubesphere/kubesphere/blob/master/LICENSE
|
|
*/
|
|
|
|
package stringutils
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
"unicode/utf8"
|
|
|
|
"github.com/asaskevich/govalidator"
|
|
)
|
|
|
|
const ansi = "[\u001B\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))"
|
|
|
|
var re = regexp.MustCompile(ansi)
|
|
|
|
// Creates an slice of slice values not included in the other given slice.
|
|
func Diff(base, exclude []string) (result []string) {
|
|
excludeMap := make(map[string]bool)
|
|
for _, s := range exclude {
|
|
excludeMap[s] = true
|
|
}
|
|
for _, s := range base {
|
|
if !excludeMap[s] {
|
|
result = append(result, s)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Unique(ss []string) (result []string) {
|
|
smap := make(map[string]bool)
|
|
for _, s := range ss {
|
|
smap[s] = true
|
|
}
|
|
for s := range smap {
|
|
result = append(result, s)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func CamelCaseToUnderscore(str string) string {
|
|
return govalidator.CamelCaseToUnderscore(str)
|
|
}
|
|
|
|
func UnderscoreToCamelCase(str string) string {
|
|
return govalidator.UnderscoreToCamelCase(str)
|
|
}
|
|
|
|
func FindString(array []string, str string) int {
|
|
for index, s := range array {
|
|
if str == s {
|
|
return index
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
func StringIn(str string, array []string) bool {
|
|
return FindString(array, str) > -1
|
|
}
|
|
|
|
func Reverse(s string) string {
|
|
size := len(s)
|
|
buf := make([]byte, size)
|
|
for start := 0; start < size; {
|
|
r, n := utf8.DecodeRuneInString(s[start:])
|
|
start += n
|
|
utf8.EncodeRune(buf[size-start:], r)
|
|
}
|
|
return string(buf)
|
|
}
|
|
|
|
func Split(str string, sep string) []string {
|
|
if str == "" {
|
|
return nil
|
|
}
|
|
return strings.Split(str, sep)
|
|
}
|
|
|
|
func StripAnsi(str string) string {
|
|
return re.ReplaceAllString(str, "")
|
|
}
|
|
|
|
func ShortenString(str string, n int) string {
|
|
if len(str) <= n {
|
|
return str
|
|
}
|
|
return str[:n]
|
|
}
|