github.com/gogf/gf/v2@v2.7.4/util/gvalid/internal/builtin/builtin_size.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package builtin 8 9 import ( 10 "errors" 11 "strconv" 12 "strings" 13 14 "github.com/gogf/gf/v2/util/gconv" 15 ) 16 17 // RuleSize implements `size` rule: 18 // Length must be :size. 19 // The length is calculated using unicode string, which means one chinese character or letter both has the length of 1. 20 // 21 // Format: size:size 22 type RuleSize struct{} 23 24 func init() { 25 Register(RuleSize{}) 26 } 27 28 func (r RuleSize) Name() string { 29 return "size" 30 } 31 32 func (r RuleSize) Message() string { 33 return "The {field} value `{value}` length must be {size}" 34 } 35 36 func (r RuleSize) Run(in RunInput) error { 37 var ( 38 valueRunes = gconv.Runes(in.Value.String()) 39 valueLen = len(valueRunes) 40 ) 41 size, err := strconv.Atoi(in.RulePattern) 42 if valueLen != size || err != nil { 43 return errors.New(strings.Replace(in.Message, "{size}", strconv.Itoa(size), -1)) 44 } 45 return nil 46 }