新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame 數(shù)據(jù)校驗(yàn)-方法介紹
以下常用方法列表,文檔更新可能滯后于代碼新特性,更多的方法及示例請(qǐng)參考代碼文檔:https://pkg.GO.dev/github.com/gogf/gf/v2/util/gvalid

十載的順河網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整順河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“順河網(wǎng)站設(shè)計(jì)”,“順河網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
New
- 說(shuō)明:?
New?創(chuàng)建并返回一個(gè)?Validator?的新對(duì)象。 - 格式:
New() *Validator- 示例:
func ExampleNew() {
validator := gvalid.New()
if err := validator.Data(16).Rules("min:18").Run(context.Background()); err != nil {
fmt.Print(err)
}
// Output:
// The value `16` must be equal or greater than 18
}Run
- 說(shuō)明:?
Run?對(duì)給定規(guī)則和信息的數(shù)據(jù)進(jìn)行校驗(yàn)操作。 - 格式:
Run(ctx context.Context) Error- 示例:
func ExampleValidator_Run() {
// check value mode
if err := g.Validator().Data(16).Rules("min:18").Run(context.Background()); err != nil {
fmt.Println("check value err:", err)
}
// check map mode
data := map[string]interface{}{
"passport": "",
"password": "123456",
"password2": "1234567",
}
rules := map[string]string{
"passport": "required|length:6,16",
"password": "required|length:6,16|same:password2",
"password2": "required|length:6,16",
}
if err := g.Validator().Data(data).Rules(rules).Run(context.Background()); err != nil {
fmt.Println("check map err:", err)
}
// check struct mode
type Params struct {
Page int `v:"required|min:1"`
Size int `v:"required|between:1,100"`
ProjectId string `v:"between:1,10000"`
}
rules = map[string]string{
"Page": "required|min:1",
"Size": "required|between:1,100",
"ProjectId": "between:1,10000",
}
obj := &Params{
Page: 0,
Size: 101,
}
if err := g.Validator().Data(obj).Run(context.Background()); err != nil {
fmt.Println("check struct err:", err)
}
// May Output:
// check value err: The value `16` must be equal or greater than 18
// check map err: The passport field is required; The passport value `` length must be between 6 and 16; The password value `123456` must be the same as field password2
// check struct err: The Page value `0` must be equal or greater than 1; The Size value `101` must be between 1 and 100
}Clone
- 說(shuō)明:?
Clone?創(chuàng)建并返回一個(gè)當(dāng)前?Validator?的值拷貝對(duì)象。 - 格式:
(v *Validator) Clone() *Validator- 示例:
func ExampleValidator_Clone() {
if err := g.Validator().Data(16).Rules("min:18").Run(context.Background()); err != nil {
fmt.Println(err)
}
if err := g.Validator().Clone().Data(20).Run(context.Background()); err != nil {
fmt.Println(err)
} else {
fmt.Println("Check Success!")
}
// Output:
// The value `16` must be equal or greater than 18
// Check Success!
}I18n
- 說(shuō)明:?
I18n?方法用于設(shè)置當(dāng)前校驗(yàn)對(duì)象的?I18N?國(guó)際化組件。默認(rèn)情況下,校驗(yàn)組件使用的是框架全局默認(rèn)的?i18n?組件對(duì)象。 - 格式:
I18n(i18nManager *gi18n.Manager) *Validator- 示例:
func ExampleValidator_I18n() {
var (
i18nManager = gi18n.New()
ctxCn = gi18n.WithLanguage(context.Background(), "cn")
validator = gvalid.New()
)
validator = validator.Data(16).Rules("min:18")
if err := validator.Run(context.Background()); err != nil {
fmt.Println(err)
}
if err := validator.I18n(i18nManager).Run(ctxCn); err != nil {
fmt.Println(err)
}
// Output:
// The value `16` must be equal or greater than 18
// 字段值`16`字段最小值應(yīng)當(dāng)為18
}Bail
- 說(shuō)明:?
Bail?方法用于設(shè)定只要后續(xù)的多個(gè)校驗(yàn)中有一個(gè)規(guī)則校驗(yàn)失敗則停止校驗(yàn)立即返回錯(cuò)誤結(jié)果。 - 格式:
Bail() *Validator- 示例:
func ExampleValidator_Bail() {
type BizReq struct {
Account string `v:"required|length:6,16|same:QQ"`
QQ string
Password string `v:"required|same:Password2"`
Password2 string `v:"required"`
}
var (
ctx = context.Background()
req = BizReq{
Account: "gf",
QQ: "123456",
Password: "GoFrame.org",
Password2: "goframe.org",
}
)
if err := g.Validator().Bail().Data(req).Run(ctx); err != nil {
fmt.Println("Use Bail Error:", err)
}
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println("Not Use Bail Error:", err)
}
// output:
// Use Bail Error: The Account value `gf` length must be between 6 and 16
// Not Use Bail Error: The Account value `gf` length must be between 6 and 16; The Account value `gf` must be the same as field QQ
}Ci
- 說(shuō)明:?
Ci?方法用于設(shè)置需要比較數(shù)值的規(guī)則時(shí),不區(qū)分字段的大小寫(xiě)。 - 格式:
Ci() *Validator- 示例:
func ExampleValidator_Ci() {
type BizReq struct {
Account string `v:"required"`
Password string `v:"required|same:Password2"`
Password2 string `v:"required"`
}
var (
ctx = context.Background()
req = BizReq{
Account: "gf",
Password: "Goframe.org", // Diff from Password2, but because of "ci", rule check passed
Password2: "goframe.org",
}
)
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println("Not Use CI Error:", err)
}
if err := g.Validator().Ci().Data(req).Run(ctx); err == nil {
fmt.Println("Use CI Passed!")
}
// output:
// Not Use CI Error: The Password value `Goframe.org` must be the same as field Password2
// Use CI Passed!
}Data
- 說(shuō)明:?
Data?方法用于傳遞需要聯(lián)合校驗(yàn)的數(shù)據(jù)。 - 格式:
Data(data interface{}) *Validator- 示例:
func ExampleValidator_Data() {
type BizReq struct {
Password1 string `v:"password"`
Password2 string `v:"password"`
}
var (
ctx = context.Background()
req = BizReq{
Password1: "goframe",
Password2: "gofra", // error length between 6 and 18
}
)
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
// Output:
// The Password2 value `gofra` is not a valid password format
}Assoc
- 說(shuō)明:?
Assoc?是一個(gè)鏈?zhǔn)讲僮骱瘮?shù),為當(dāng)前?Validator?設(shè)置驗(yàn)證的數(shù)據(jù)。參數(shù)?assoc?的類(lèi)型通常是?map?,指定了?union validator?中的?map?的值。 - 注意:使用非?
nil?的?assoc?參數(shù),會(huì)將?useDataInsteadOfObjectAttributes?屬性設(shè)置為?true?。 - 格式:
Assoc(assoc interface{}) *Validator- 示例:
func ExampleValidator_Assoc() {
type User struct {
Name string `v:"required"`
Type int `v:"required"`
}
data := g.Map{
"name": "john",
}
user := User{}
if err := gconv.Scan(data, &user); err != nil {
panic(err)
}
if err := g.Validator().Data(user).Assoc(data).Run(context.Background()); err != nil {
fmt.Print(err)
}
// Output:
// The Type field is required
}Rules
- 說(shuō)明:?
Rules?方法用于傳遞當(dāng)前鏈?zhǔn)讲僮餍r?yàn)的自定義校驗(yàn)規(guī)則。 - 格式:
Rules(rules interface{}) *Validator- 示例:
func ExampleValidator_Rules() {
if err := g.Validator().Data(16).Rules("min:18").Run(context.Background()); err != nil {
fmt.Println(err)
}
// Output:
// The value `16` must be equal or greater than 18
}Message
- 說(shuō)明:?
Messages?方法用于傳遞當(dāng)前鏈?zhǔn)讲僮餍r?yàn)的自定義錯(cuò)誤提示信息。 - 格式:
Messages(messages interface{}) *Validator- 示例:
func ExampleValidator_Messages() {
if err := g.Validator().Data(16).Rules("min:18").Messages("Can not regist, Age is less then 18!").Run(context.Background()); err != nil {
fmt.Println(err)
}
// Output:
// Can not regist, Age is less then 18!
}RuleFunc
- 說(shuō)明:?
RuleFunc?向當(dāng)前的?Validator?注冊(cè)一個(gè)自定義校驗(yàn)規(guī)則的函數(shù)。 - 格式:
RuleFunc(rule string, f RuleFunc) *Validator- 示例:
func ExampleValidator_RuleFunc() {
var (
ctx = context.Background()
lenErrRuleName = "LenErr"
passErrRuleName = "PassErr"
lenErrRuleFunc = func(ctx context.Context, in gvalid.RuleFuncInput) error {
pass := in.Value.String()
if len(pass) != 6 {
return errors.New(in.Message)
}
return nil
}
passErrRuleFunc = func(ctx context.Context, in gvalid.RuleFuncInput) error {
pass := in.Value.String()
if m := in.Data.Map(); m["data"] != pass {
return errors.New(in.Message)
}
return nil
}
)
type LenErrStruct struct {
Value string `v:"uid@LenErr#Value Length Error!"`
Data string `p:"data"`
}
st := &LenErrStruct{
Value: "123",
Data: "123456",
}
// single error sample
if err := g.Validator().RuleFunc(lenErrRuleName, lenErrRuleFunc).Data(st).Run(ctx); err != nil {
fmt.Println(err)
}
type MultiErrorStruct struct {
Value string `v:"uid@LenErr|PassErr#Value Length Error!|Pass is not Same!"`
Data string `p:"data"`
}
multi := &MultiErrorStruct{
Value: "123",
Data: "123456",
}
// multi error sample
if err := g.Validator().RuleFunc(lenErrRuleName, lenErrRuleFunc).RuleFunc(passErrRuleName, passErrRuleFunc).Data(multi).Run(ctx); err != nil {
fmt.Println(err)
}
// Output:
// Value Length Error!
// Value Length Error!; Pass is not Same!
}RuleFuncMap
- 說(shuō)明:?
RuleFuncMap?向當(dāng)前的?Validator?注冊(cè)多個(gè)自定義校驗(yàn)規(guī)則的函數(shù)。 - 格式:
RuleFuncMap(m map[string]RuleFunc) *Validator- 示例:
func ExampleValidator_RuleFuncMap() {
var (
ctx = context.Background()
lenErrRuleName = "LenErr"
passErrRuleName = "PassErr"
lenErrRuleFunc = func(ctx context.Context, in gvalid.RuleFuncInput) error {
pass := in.Value.String()
if len(pass) != 6 {
return errors.New(in.Message)
}
return nil
}
passErrRuleFunc = func(ctx context.Context, in gvalid.RuleFuncInput) error {
pass := in.Value.String()
if m := in.Data.Map(); m["data"] != pass {
return errors.New(in.Message)
}
return nil
}
ruleMap = map[string]gvalid.RuleFunc{
lenErrRuleName: lenErrRuleFunc,
passErrRuleName: passErrRuleFunc,
}
)
type MultiErrorStruct struct {
Value string `v:"uid@LenErr|PassErr#Value Length Error!|Pass is not Same!"`
Data string `p:"data"`
}
multi := &MultiErrorStruct{
Value: "123",
Data: "123456",
}
if err := g.Validator().RuleFuncMap(ruleMap).Data(multi).Run(ctx); err != nil {
fmt.Println(err)
}
// Output:
// Value Length Error!; Pass is not Same!
} 網(wǎng)頁(yè)題目:創(chuàng)新互聯(lián)GoFrame教程:GoFrame 數(shù)據(jù)校驗(yàn)-方法介紹
網(wǎng)頁(yè)URL:http://fisionsoft.com.cn/article/dheoicj.html


咨詢
建站咨詢
