validation

package module
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 17, 2022 License: MIT Imports: 5 Imported by: 1

README

validation

Go Go Report Card License Go version codecov PkgGoDev

数据验证

包含了以下类型的数据验证:

  • GB11643 身份证验证和分析;
  • GB32100 统一信用代码验证和分析;
  • 银行卡卡号验证;
  • ISBN 验证;
  • IPv4/IPv6 验证;
  • 中国区手机/电话号码验证;
  • 域名验证;
  • Email 验证;
import (
    "github.com/issue9/validation"
    "github.com/issue9/validation/validator"
    "golang.org/x/text/language"
    "golang.org/x/text/message"
)

type Object {
    Age int
    Name string
}

o := &Object{}

p := message.NewPrinter(language.MustParse("cmn-Hans"))
v := validation.New(validation.ContinueAtError, p)
age := validation.NewRule(validator.Min(18), "不能小于 18")
required :=validation.NewRule(validator.Required(false), "不能为空")
messages := v.NewField(&o.Age, "age", age).
    NewField(&o.Name, "name", required).
    Messages()

本地化

本地化采用 golang.org/x/text 包

import (
    "github.com/issue9/validation"
    "github.com/issue9/validation/validator"
    "golang.org/x/text/language"
    "golang.org/x/text/message"
    "golang.org/x/text/message/catalog"
)

type Object {
    Age int
    Name string
}

builder := catalog.NewBuilder()
builder.SetString(language.SimplifiedChinese, "lang", "chn")
builder.SetString(language.TraditionalChinese, "lang", "cht")

o := &Object{}

p := message.NewPrinter(language.SimplifiedChinese, message.Catalog(builder))
v := validation.New(validation.ContinueAtError, p)

age := validation.NewRule(validator.Min(18), "lang")// 根据 p 的不同,会输出不同内容
required :=validation.NewRule(validator.Required(false), "不能为空")
messages := v.NewField(&o.Age, "age", age). 
    NewField(&o.Name, "name", required).
    Messages()

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

Documentation

Overview

Package validation 数据验证

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ErrorHandling

type ErrorHandling int8
const (
	ContinueAtError  ErrorHandling = iota // 碰到错误不中断验证
	ExitAtError                           // 碰到错误中断验证
	ExitFieldAtError                      // 碰到错误中断当前字段的其它规则验证
)

当验证出错时的几种可用处理方式

type LocaleMessages added in v0.7.0

type LocaleMessages = MessagesOf[string]

LocaleMessages 表示一组错误信息的集合

键名查询参数名称,键值则为在解析和验证过种中返回的错误信息。

func Locale added in v0.7.0

func Locale(msg Messages, p *message.Printer) LocaleMessages

type Messages

Messages 一组未本地化的消息集合

键名查询参数名称,键值则为在解析和验证过种中返回的错误信息。

type MessagesOf added in v0.7.0

type MessagesOf[T any] map[string][]T

func (MessagesOf[T]) Add added in v0.7.0

func (msg MessagesOf[T]) Add(key string, val ...T)

Add 为查询参数 key 添加一条新的错误信息

func (MessagesOf[T]) Empty added in v0.7.0

func (msg MessagesOf[T]) Empty() bool

func (MessagesOf[T]) Merge added in v0.7.0

func (msg MessagesOf[T]) Merge(m MessagesOf[T])

Merge 将另一个 Messages 内容合并到当前实例

func (MessagesOf[T]) Set added in v0.7.0

func (msg MessagesOf[T]) Set(key string, val ...T)

Set 将查询参数 key 的错误信息改为 val

type Rule

type Rule struct {
	// contains filtered or unexported fields
}

Rule 验证规则

这是对 Validator 的二次包装,保存着未本地化的错误信息,用以在验证失败之后返回给 Validation。

func NewRule

func NewRule(validator Validator, key message.Reference, v ...any) *Rule

type ValidateFunc

type ValidateFunc = validator.ValidateFunc

type Validation

type Validation struct {
	// contains filtered or unexported fields
}

func New

func New(errHandling ErrorHandling, cap int) *Validation

New 返回 Validation 对象

cap 表示初始的 Messages 容量大小;

func (*Validation) LocaleMessages added in v0.7.0

func (v *Validation) LocaleMessages(p *message.Printer) LocaleMessages

LocaleMessages 返回本地化的验证结果

func (*Validation) Messages

func (v *Validation) Messages() Messages

Messages 返回验证结果

func (*Validation) NewField

func (v *Validation) NewField(val any, name string, rules ...*Rule) *Validation

NewField 验证新的字段

val 表示需要被验证的值,如果是一个对象且需要验证子字段,那么让对象实现 FieldsValidator 接口, 则会自动调用该方法验证子项,将会将验证完的信息返回给当前的 Validation 实例; name 表示当前字段的名称,当验证出错时,以此值作为名称返回给用户; rules 表示验证的规则,按顺序依次验证。

func (*Validation) NewMapField added in v0.8.0

func (v *Validation) NewMapField(val any, name string, rules ...*Rule) *Validation

NewMapField 验证 map 字段

如果字段类型不是 map,将直接返回错误。

func (*Validation) NewSliceField added in v0.8.0

func (v *Validation) NewSliceField(val any, name string, rules ...*Rule) *Validation

NewSliceField 验证数组字段

如果字段类型不是数组或是字符串,将直接返回错误。

func (*Validation) When added in v0.7.1

func (v *Validation) When(cond bool, f func(v *Validation)) *Validation

When 只有满足 cond 才执行 f 中的验证

f 中的 v 即为当前对象;

type Validator

type Validator = validator.Validator

Directories

Path Synopsis
is
Package is 包提供了一系列的判断函数
Package is 包提供了一系列的判断函数
gb11643
Package gb11643 解析身分证详情
Package gb11643 解析身分证详情
gb32100
Package gb32100 统一信用代码校验 GB32100—2015
Package gb32100 统一信用代码校验 GB32100—2015
luhn
Package luhn 模 10 校验算法 https://en.wikipedia.org/wiki/Luhn_algorithm 1.
Package luhn 模 10 校验算法 https://en.wikipedia.org/wiki/Luhn_algorithm 1.
Package validator 提供各类验证器
Package validator 提供各类验证器

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL