golang字符串处理与验证工具插件库handy的使用
Golang字符串处理与验证工具插件库handy的使用
Handy是一个Golang实用工具库,提供了一系列字符串处理、验证和格式化功能。它不需要任何外部依赖,适用于Go 1.14及以上版本。
主要功能
字符串验证
package main
import (
"fmt"
"github.com/miguelpragier/handy"
)
func main() {
// 验证电子邮件格式
email := "test@example.com"
if handy.CheckEmail(email) {
fmt.Println("有效的电子邮件地址")
} else {
fmt.Println("无效的电子邮件地址")
}
// 验证密码复杂度
password := "Passw0rd!"
confirmation := "Passw0rd!"
result := handy.CheckNewPassword(password, confirmation, 8,
handy.CheckNewPasswordComplexityRequireNumber|handy.CheckNewPasswordComplexityRequireSymbol)
if result == 0 {
fmt.Println("密码有效")
} else {
fmt.Println("密码不符合要求:", handy.CheckNewPasswordResult("en", result))
}
}
字符串处理
package main
import (
"fmt"
"github.com/miguelpragier/handy"
)
func main() {
// 只保留字母
str := "Hello123 World!"
fmt.Println(handy.OnlyLetters(str)) // 输出: HelloWorld
// 只保留数字
fmt.Println(handy.OnlyDigits(str)) // 输出: 123
// 只保留字母和数字
fmt.Println(handy.OnlyLettersAndNumbers(str)) // 输出: Hello123World
// 字符串哈希
fmt.Println(handy.StringHash("secret")) // 输出: SHA256哈希值
// 字符串截断
longStr := "This is a very long string that needs to be truncated"
fmt.Println(handy.Truncate(longStr, 20, true)) // 输出: This is a very long
}
字符串转换
package main
import (
"fmt"
"github.com/miguelpragier/handy"
)
func main() {
// 字符串转浮点数
floatStr := "1,234.56"
f := handy.StringAsFloat(floatStr, '.', ',')
fmt.Println(f) // 输出: 1234.56
// 字符串转整数
intStr := "1234"
i := handy.StringAsInteger(intStr)
fmt.Println(i) // 输出: 1234
// 高级字符串转换
str := " Hello World 123! "
transformed := handy.Transform(str, 15,
handy.TransformFlagTrim|handy.TransformFlagUpperCase|handy.TransformFlagOnlyLetters)
fmt.Println(transformed) // 输出: HELLOWORLD
}
日期时间处理
package main
import (
"fmt"
"time"
"github.com/miguelpragier/handy"
)
func main() {
// 检查日期格式
dateStr := "2023-05-15"
fmt.Println(handy.CheckDate("2006-01-02", dateStr)) // 输出: true
// 检查YYYMMDD格式日期
fmt.Println(handy.CheckDateYMD("20230515")) // 输出: true
// 字符串转时间
t, err := handy.YMDasDate("20230515")
if err == nil {
fmt.Println(t.Format("2006-01-02")) // 输出: 2023-05-15
}
// 计算时间差
from := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
to := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
fmt.Println(handy.ElapsedYears(from, to)) // 输出: 3
}
其他实用功能
package main
import (
"fmt"
"github.com/miguelpragier/handy"
)
func main() {
// 三元操作符
result := handy.Tif(true, "Yes", "No")
fmt.Println(result) // 输出: Yes
// 检查数字范围
fmt.Println(handy.Between(5, 1, 10)) // 输出: true
// 反转字符串
fmt.Println(handy.Reverse("Hello")) // 输出: olleH
// 检查数组中是否存在元素
arr := []int{1, 2, 3, 4, 5}
fmt.Println(handy.InArray(arr, 3)) // 输出: true
fmt.Println(handy.InArray(arr, 6)) // 输出: false
}
特点
- 无外部依赖
- 全面的字符串处理功能
- 内置验证器(电子邮件、密码、日期等)
- 支持巴西特定的验证(CPF、CNPJ)
- 提供HTTP请求参数处理工具
Handy是一个功能丰富且轻量级的Golang工具库,特别适合需要处理字符串验证和转换的项目。
更多关于golang字符串处理与验证工具插件库handy的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang字符串处理与验证工具插件库handy的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang字符串处理与验证工具handy使用指南
handy是一个实用的Golang字符串处理与验证工具库,提供了丰富的字符串操作和验证功能。下面我将详细介绍handy的主要功能和使用方法。
安装handy
首先使用go get命令安装handy:
go get github.com/stretchr/handy
常用字符串验证功能
1. 基本验证
package main
import (
"fmt"
"github.com/stretchr/handy/strings"
)
func main() {
// 检查字符串是否为空
fmt.Println(strings.IsEmpty("")) // true
fmt.Println(strings.IsEmpty("hello")) // false
// 检查字符串是否为空白(包括空格、制表符等)
fmt.Println(strings.IsBlank(" \t\n")) // true
fmt.Println(strings.IsBlank("hello")) // false
// 检查字符串是否包含子串
fmt.Println(strings.Contains("hello world", "world")) // true
}
2. 格式验证
// 验证电子邮件格式
func isValidEmail(email string) bool {
return strings.Matches(email, `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
}
// 验证URL格式
func isValidURL(url string) bool {
return strings.Matches(url, `^(http|https)://[a-zA-Z0-9-\.]+\.[a-zA-Z]{2,}(/\S*)?$`)
}
// 验证手机号格式
func isValidPhone(phone string) bool {
return strings.Matches(phone, `^1[3-9]\d{9}$`)
}
字符串处理功能
1. 字符串截取
// 截取字符串
func main() {
str := "hello world"
// 截取前5个字符
fmt.Println(strings.Truncate(str, 5)) // "hello"
// 从第6个字符开始截取
fmt.Println(strings.Substring(str, 6)) // "world"
// 从第3个字符开始截取3个字符
fmt.Println(strings.Substring(str, 3, 3)) // "llo"
}
2. 字符串转换
func main() {
// 首字母大写
fmt.Println(strings.Capitalize("hello")) // "Hello"
// 转换为驼峰命名
fmt.Println(strings.CamelCase("hello_world")) // "helloWorld"
// 转换为帕斯卡命名(首字母大写驼峰)
fmt.Println(strings.PascalCase("hello_world")) // "HelloWorld"
// 转换为蛇形命名
fmt.Println(strings.SnakeCase("HelloWorld")) // "hello_world"
}
3. 字符串填充
func main() {
// 左侧填充
fmt.Println(strings.PadLeft("123", "0", 5)) // "00123"
// 右侧填充
fmt.Println(strings.PadRight("123", "0", 5)) // "12300"
// 两侧填充
fmt.Println(strings.PadBoth("123", "0", 5)) // "01230"
}
高级功能
1. 字符串模板处理
func main() {
template := "Hello, {name}! Your age is {age}."
data := map[string]interface{}{
"name": "John",
"age": 30,
}
result, err := strings.Template(template, data)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(result) // "Hello, John! Your age is 30."
}
2. 随机字符串生成
func main() {
// 生成10位随机字母数字字符串
randomStr := strings.Random(10, strings.AlphaNumeric)
fmt.Println(randomStr) // 类似 "aB3x9Yz7P1"
// 生成8位随机数字字符串
randomNum := strings.Random(8, strings.Numeric)
fmt.Println(randomNum) // 类似 "38475629"
}
实际应用示例
用户注册验证
type User struct {
Username string
Email string
Password string
}
func validateUser(user User) error {
if strings.IsBlank(user.Username) {
return errors.New("用户名不能为空")
}
if len(user.Username) < 4 || len(user.Username) > 20 {
return errors.New("用户名长度必须在4-20个字符之间")
}
if !strings.Matches(user.Email, `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`) {
return errors.New("邮箱格式不正确")
}
if len(user.Password) < 8 {
return errors.New("密码长度不能少于8个字符")
}
return nil
}
敏感信息脱敏处理
func desensitizePhone(phone string) string {
if len(phone) != 11 {
return phone
}
return strings.Substring(phone, 0, 3) + "****" + strings.Substring(phone, 7)
}
func desensitizeIDCard(idCard string) string {
if len(idCard) != 18 {
return idCard
}
return strings.Substring(idCard, 0, 6) + "********" + strings.Substring(idCard, 14)
}
总结
handy库提供了丰富的字符串处理和验证功能,可以大大简化Golang开发中的字符串操作。它的主要特点包括:
- 简洁易用的API设计
- 全面的验证功能
- 丰富的字符串处理工具
- 良好的性能表现
通过合理使用handy库,可以显著提高字符串相关操作的开发效率和代码质量。