diff --git a/docs/strutil.md b/docs/strutil.md index 30db7ff..98af9ef 100644 --- a/docs/strutil.md +++ b/docs/strutil.md @@ -55,6 +55,7 @@ import ( - [ReplaceWithMap](#ReplaceWithMap) - [Trim](#Trim) - [SplitAndTrim](#SplitAndTrim) +- [HideString](#HideString)
@@ -1246,7 +1247,6 @@ func main() { } ``` - ### SplitAndTrim

Splits string `str` by a string `delimiter` to a slice, and calls Trim to every element of slice. It ignores the elements which are empty after Trim.

@@ -1279,3 +1279,42 @@ func main() { // [a b c d 1] } ``` + +### HideString + +

HideString hide some chars in source string with param `replaceChar`. replace range is origin[start : end]. [start, end).

+ +Signature: + +```go +func HideString(origin string, start, end int, replaceChar string) string +``` + +Example: + +```go +import ( + "fmt" + "github.com/duke-git/lancet/v2/strutil" +) + +func main() { + str := "13242658976" + + result1 := strutil.HideString(str, 3, 3, "*") + result2 := strutil.HideString(str, 3, 4, "*") + result3 := strutil.HideString(str, 3, 7, "*") + result4 := strutil.HideString(str, 7, 11, "*") + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // 13242658976 + // 132*2658976 + // 132****8976 + // 1324265**** +} +``` diff --git a/docs/strutil_zh-CN.md b/docs/strutil_zh-CN.md index 2b1d935..d6c1b80 100644 --- a/docs/strutil_zh-CN.md +++ b/docs/strutil_zh-CN.md @@ -55,6 +55,7 @@ import ( - [ReplaceWithMap](#ReplaceWithMap) - [Trim](#Trim) - [SplitAndTrim](#SplitAndTrim) +- [HideString](#HideString)
@@ -1279,3 +1280,43 @@ func main() { // [a b c d 1] } ``` + + +### HideString + +

使用参数`replaceChar`隐藏源字符串中的一些字符。替换范围是 origin[start : end]。

+ +函数签名: + +```go +func HideString(origin string, start, end int, replaceChar string) string +``` + +示例: + +```go +import ( + "fmt" + "github.com/duke-git/lancet/v2/strutil" +) + +func main() { + str := "13242658976" + + result1 := strutil.HideString(str, 3, 3, "*") + result2 := strutil.HideString(str, 3, 4, "*") + result3 := strutil.HideString(str, 3, 7, "*") + result4 := strutil.HideString(str, 7, 11, "*") + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // 13242658976 + // 132*2658976 + // 132****8976 + // 1324265**** +} +``` diff --git a/strutil/string.go b/strutil/string.go index 8df7d09..a7e8ea8 100644 --- a/strutil/string.go +++ b/strutil/string.go @@ -501,3 +501,30 @@ func Trim(str string, characterMask ...string) string { return strings.Trim(str, trimChars) } + +// HideString hide some chars in source string with param `replaceChar`. +// replace range is origin[start : end]. [start, end) +// Play: todo +func HideString(origin string, start, end int, replaceChar string) string { + size := len(origin) + + if start > size-1 || start < 0 || end < 0 || start > end { + return origin + } + + if end > size { + end = size + } + + if replaceChar == "" { + return origin + } + + startStr := origin[0:start] + endStr := origin[end:size] + + replaceSize := end - start + replaceStr := strings.Repeat(replaceChar, replaceSize) + + return startStr + replaceStr + endStr +} diff --git a/strutil/string_example_test.go b/strutil/string_example_test.go index 87d49a3..43a21cb 100644 --- a/strutil/string_example_test.go +++ b/strutil/string_example_test.go @@ -571,3 +571,23 @@ func ExampleSplitAndTrim() { // [a b c d $1] // [a b c d 1] } + +func ExampleHideString() { + str := "13242658976" + + result1 := HideString(str, 3, 3, "*") + result2 := HideString(str, 3, 4, "*") + result3 := HideString(str, 3, 7, "*") + result4 := HideString(str, 7, 11, "*") + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // 13242658976 + // 132*2658976 + // 132****8976 + // 1324265**** +} diff --git a/strutil/string_test.go b/strutil/string_test.go index 6fc8a35..f14635a 100644 --- a/strutil/string_test.go +++ b/strutil/string_test.go @@ -432,3 +432,21 @@ func TestSplitAndTrim(t *testing.T) { assert.Equal([]string{"a", "b", "c", "d", "$1"}, result1) assert.Equal([]string{"a", "b", "c", "d", "1"}, result2) } + +func TestHideString(t *testing.T) { + assert := internal.NewAssert(t, "TestTrim") + + str := "13242658976" + + assert.Equal("13242658976", HideString(str, 0, -1, "*")) + assert.Equal("13242658976", HideString(str, 0, 0, "*")) + assert.Equal("****2658976", HideString(str, 0, 4, "*")) + + assert.Equal("13242658976", HideString(str, 3, 3, "*")) + assert.Equal("132*2658976", HideString(str, 3, 4, "*")) + assert.Equal("132****8976", HideString(str, 3, 7, "*")) + assert.Equal("1324265****", HideString(str, 7, 11, "*")) + + assert.Equal("1324265****", HideString(str, 7, 100, "*")) + assert.Equal("13242658976", HideString(str, 100, 100, "*")) +}