validator

package
v0.0.0-...-ae40e7c Latest Latest
Warning

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

Go to latest
Published: May 3, 2018 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package validator 实现了验证器的基本接口

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckType

func CheckType(k reflect.Kind) (string, bool)

CheckType 检查类型是否符合参数要求

func Register

func Register(kind string, creator ValidatorCreator)

Register 注册创建器

func RegisterFunc

func RegisterFunc(name string, f interface{}) error

RegisterFunc 注册验证函数,验证函数的第一个参数必须是string,并且其他参数只能是int64,float64,string三种类型,返回值必须是bool类型

Types

type BaseNode

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

基础节点

func (*BaseNode) AddChild

func (this *BaseNode) AddChild(n SyntaxNode)

AddChild 添加子节点

func (*BaseNode) ChangeKind

func (this *BaseNode) ChangeKind(kind NodeKind)

ChangeKind 改变语法节点类型

func (*BaseNode) Kind

func (this *BaseNode) Kind() NodeKind

Kind 语法节点类型

func (*BaseNode) Left

func (this *BaseNode) Left() SyntaxNode

Left 返回左节点

func (*BaseNode) Parent

func (this *BaseNode) Parent() SyntaxNode

Parent 获取父节点

func (*BaseNode) Right

func (this *BaseNode) Right() SyntaxNode

Right 返回右节点

func (*BaseNode) SetLeft

func (this *BaseNode) SetLeft(n SyntaxNode)

SetLeft 设置左节点

func (*BaseNode) SetParent

func (this *BaseNode) SetParent(p SyntaxNode)

SetParent 设置父节点

func (*BaseNode) SetRight

func (this *BaseNode) SetRight(n SyntaxNode)

SetRight 设置右节点

type Error

type Error string

错误信息

const (
	ErrorInvalidValidatorCreator Error = "ErrorInvalidValidatorCreator(V10000):无效的连接创建器"
	ErrorInvalidKind             Error = "ErrorInvalidKind(V10010):无效的验证器类型(%s)"
	ErrorIllegalNode             Error = "ErrorIllegalNode(V10011):严重错误,当前验证器出现非法节点(%s)"
	ErrorIllegalParam            Error = "ErrorIllegalParam(V10012):严重错误,当前验证器出现非法参数(%s)"
	ErrorIllegalParser           Error = "ErrorIllegalParser(V10020):严重错误,当前解析器无法正确的解析字符串"

	ErrorInvalidFuncName        Error = "ErrorInvalidFuncName(V10020):无效的函数名称(%s)"
	ErrorMustBeFunc             Error = "ErrorMustBeFunc(V10021):使用了非函数类型(%s)进行注册"
	ErrorIncorrectParamList     Error = "ErrorIncorrectParamList(V10030):函数拥有不正确的参数列表(%s)"
	ErrorFirstParamMustBeString Error = "ErrorFirstParamMustBeString(V10031):函数首个参数必须是字符串(%s)"
	ErrorIncorrectParamType     Error = "ErrorIncorrectParamType(V10032):函数的第%d个参数类型(%s)不正确)"
	ErrorUnmatchedFunc          Error = "ErrorUnmatchedFunc(V10040):验证函数(%s)不存在,请确保已经注册了该验证函数"

	ErrorInvalidChar         Error = "ErrorInvalidChar(V11000):无效的字符(位置:%d,%s)"
	ErrorInvalidLogicalAnd   Error = "ErrorInvalidLogicalAnd(V11010):逻辑与的形式必须是&&(位置:%d)"
	ErrorInvalidLogicalOr    Error = "ErrorInvalidLogicalOr(V11020):逻辑或的形式必须是||(位置:%d)"
	ErrorInvalidRelop        Error = "ErrorInvalidRelop(V11030):关系运算符错误,缺少符号=(位置:%d)"
	ErrorUnmatchEnding       Error = "ErrorUnmatchEnding(V11040):字符序列缺少结束标记(位置:%d,%s)"
	ErrorInvalidNumberFormat Error = "ErrorInvalidNumberFormat(V11050):数值格式错误,+/-之后必须是数字(位置:%d)"
	ErrorInvalidFloat        Error = "ErrorInvalidFloat(V11051):浮点格式错误,浮点数中不能包含两个小数点(位置:%d)"

	ErrorInvalidExpr                 Error = "ErrorInvalidExpr(V12000):无效的表达式,表达式尾部含有未被解析的内容(位置:%d,%s)"
	ErrorInvalidExprHead             Error = "ErrorInvalidExprHead(V12001):无效的表达式,表达式的第一个标记必须是左括号或函数(位置:%d)"
	ErrorInvalidConnector            Error = "ErrorInvalidConnector(V12010):必须使用&&或||连接表达式或函数,而不是(位置:%d,%s)"
	ErrorInvalidRelopFuncParams      Error = "ErrorInvalidRelopFuncParams(V12020):关系函数参数列表错误(位置:%d,%s)"
	ErrorInvalidNamedRelopFuncParams Error = "ErrorInvalidNamedRelopFuncParams(V12021):命名关系函数参数列表错误(位置:%d,%s)"
	ErrorInvalidFuncParams           Error = "ErrorInvalidFuncParams(V12022):函数参数列表错误(位置:%d,%s)"
	ErrorInvalidFunc                 Error = "ErrorInvalidFunc(V12030):无法识别的函数(位置:%d,%s)"
	ErrorInvalidParamsList           Error = "ErrorInvalidParamsList(V12040):参数列表中存在无效的分隔符(位置:%d,%s)"
	ErrorInvalidParamType            Error = "ErrorInvalidParamType(V12050):参数列表中使用了错误的参数(位置:%d,%s)"
	ErrorUnmatchedToken              Error = "ErrorUnmatchedToken(V12060):类型匹配错误,需要的类型为(%s),实际类型为(位置:%d,%s)"
)

错误码

func (Error) Error

func (this Error) Error() error

Error 生成error类型

func (Error) Format

func (this Error) Format(data ...interface{}) Error

Format 格式化错误信息并生成新的错误信息

func (Error) String

func (this Error) String() string

String 返回错误字符串描述

type ExecutableFuncNode

type ExecutableFuncNode struct {
	BaseNode
	// contains filtered or unexported fields
}

可执行执行函数节点,由FuncNode和RegFuncNode转换而成

func (*ExecutableFuncNode) Execute

func (this *ExecutableFuncNode) Execute(str string) bool

Execute 执行

type FuncNode

type FuncNode struct {
	BaseNode
	// contains filtered or unexported fields
}

函数节点

func (*FuncNode) AddParam

func (this *FuncNode) AddParam(t *Token)

AddParam 添加参数信息

func (*FuncNode) SetFuncName

func (this *FuncNode) SetFuncName(name string)

SetFuncName 设置函数名称

type Lexer

type Lexer struct {
	Data []rune //字符串
	Pos  int    //下一个标记开始的位置
}

词法分析器

func NewLexer

func NewLexer(src string) *Lexer

NewLexer 创建词法解析器

func (*Lexer) Fetch

func (this *Lexer) Fetch() (*Token, error)

Fetch 获取下一个标记,已经没有有效标记的时候会返回TokenKindEOF类型的标记

func (*Lexer) Prefetch

func (this *Lexer) Prefetch() (*Token, error)

Prefetch 预获取下一个标记,已经没有有效标记的时候会返回TokenKindEOF类型的标记

func (*Lexer) Token

func (this *Lexer) Token(t *Token) string

Token 获取Token字符串

type NamedFunc

type NamedFunc struct {
	Name string         //函数名称
	Func *reflect.Value //函数
}

命名函数

func (*NamedFunc) Validate

func (this *NamedFunc) Validate(str string, optparams ...interface{}) bool

Validate 根据传入参数进行验证,并返回验证结果

type NodeKind

type NodeKind byte

节点类型

const (
	NodeKindSpace    NodeKind = iota //空间节点
	NodeKindAnd                      //逻辑与节点
	NodeKindOr                       //逻辑或节点
	NodeKindFunc                     //函数节点
	NodeKindRegFunc                  //正则函数节点
	NodeKindExecutor                 //可执行函数(执行器)节点
)

func (NodeKind) String

func (this NodeKind) String() string

type Parser

type Parser struct {
	Lexer *Lexer
	Tree  SyntaxNode
}

语法分析器

func NewParser

func NewParser(l *Lexer) *Parser

NewParser 创建语法分析器

func (*Parser) Parse

func (this *Parser) Parse() (e error)

Parse 解析成语法树

type RegFunc

type RegFunc struct {
	Exp *regexp.Regexp
}

正则函数

func (*RegFunc) Validate

func (this *RegFunc) Validate(str string, optparams ...interface{}) bool

Validate 根据传入参数进行验证,并返回验证结果

type StringValidator

type StringValidator struct {
	Tree SyntaxNode
}

字符串验证器

1.使用()改变优先级
2.使用&&和||连接函数或表达式
3.函数包括以下几种
  (1)普通函数:IsOK IsOK() BigThan(1234)  Contain('abc')
  (2)名称中包含关系运算符:>=10 Len==11 Complex<(12,22)
  (3)正则表达式:/[a-z]+?/

func (*StringValidator) Validate

func (this *StringValidator) Validate(str string) bool

Validate 验证

type SyntaxNode

type SyntaxNode interface {
	// Kind 语法节点类型
	Kind() NodeKind
	// ChangeKind 改变语法节点类型
	ChangeKind(kind NodeKind)
	// Parent 获取父节点
	Parent() SyntaxNode
	// SetParent 设置父节点
	SetParent(n SyntaxNode)
	// Left 返回左节点
	Left() SyntaxNode
	// SetLeft 设置左节点
	SetLeft(n SyntaxNode)
	// Right 返回右节点
	Right() SyntaxNode
	// SetRight 设置右节点
	SetRight(n SyntaxNode)
	// AddChild 添加子节点
	AddChild(n SyntaxNode)
}

语法节点接口

func NewAndNode

func NewAndNode() SyntaxNode

NewAndNode 创建逻辑与节点

func NewExecutableFuncNode

func NewExecutableFuncNode(v ValidatorFunc, params []interface{}) SyntaxNode

NewExecutableFuncNode 创建可执行执行函数节点

func NewFuncNode

func NewFuncNode(name string) SyntaxNode

NewFuncNode 创建函数节点

func NewOrNode

func NewOrNode() SyntaxNode

NewOrNode 创建逻辑或节点

func NewRegFuncNode

func NewRegFuncNode(exp string) SyntaxNode

NewRegFuncNode 创建正则函数节点

func NewSpaceNode

func NewSpaceNode() SyntaxNode

NewSpaceNode 创建空间节点

type Token

type Token struct {
	Kind  TokenKind   //标记类型
	Pos   int         //起始位置
	Len   int         //长度
	Value interface{} //Token值,TokenKindInteger->int64,TokenKindFloat->float64,其他->string
}

标记

func NewToken

func NewToken(kind TokenKind, pos int, length int, value interface{}) *Token

NewToken 创建标记

func (*Token) Float64Value

func (this *Token) Float64Value() float64

Float64Value 返回浮点类型的值,使用前确保Value为float64类型

func (*Token) Int64Value

func (this *Token) Int64Value() int64

Int64Value 返回整数类型的值,使用前确保Value为int64类型

func (*Token) StringValue

func (this *Token) StringValue() string

StringValue 返回字符串类型的值,使用前确保Value为string类型

type TokenKind

type TokenKind byte

标记类型

const (
	TokenKindEOF     TokenKind = iota //结束标记
	TokenKindInteger                  //整数
	TokenKindFloat                    //浮点数
	TokenKindString                   //字符串
	TokenKindRelop                    //关系运算符
	TokenKindId                       //id
	TokenKindRegexp                   //正则表达式
	TokenKindAnd                      //逻辑与
	TokenKindOr                       //逻辑或
	TokenKindLP                       //左括号
	TokenKindRP                       //右括号
	TokenKindSep                      //逗号分隔符
)

func (TokenKind) String

func (this TokenKind) String() string

type Validator

type Validator interface {
	Validate(str string) bool
}

验证器

func NewStringValidator

func NewStringValidator(source string) (Validator, error)

NewStringValidator 创建字符串验证器

func NewValidator

func NewValidator(kind string, source string) (Validator, error)

NewValidator 创建一个新的Validator

kind:类型

type ValidatorCreator

type ValidatorCreator func(source string) (Validator, error)

创建器

suorce: 用于创建验证器的信息

type ValidatorFunc

type ValidatorFunc interface {
	Validate(str string, optparams ...interface{}) bool
}

验证器函数

func NewRegFunc

func NewRegFunc(reg string) (ValidatorFunc, error)

NewRegFunc 创建正则函数

Jump to

Keyboard shortcuts

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