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
}

特点

  1. 无外部依赖
  2. 全面的字符串处理功能
  3. 内置验证器(电子邮件、密码、日期等)
  4. 支持巴西特定的验证(CPF、CNPJ)
  5. 提供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开发中的字符串操作。它的主要特点包括:

  1. 简洁易用的API设计
  2. 全面的验证功能
  3. 丰富的字符串处理工具
  4. 良好的性能表现

通过合理使用handy库,可以显著提高字符串相关操作的开发效率和代码质量。

回到顶部