github.com/profzone/eden-framework@v1.0.10/pkg/validate/validatetpl/string.go (about) 1 package validatetpl 2 3 import ( 4 "fmt" 5 "regexp" 6 "unicode/utf8" 7 ) 8 9 func NewValidateChar(min int, max int) func(v interface{}) (bool, string) { 10 return func(v interface{}) (bool, string) { 11 if stringer, ok := v.(fmt.Stringer); ok { 12 v = stringer.String() 13 } 14 if value, ok := v.(string); ok { 15 word_len := utf8.RuneCount([]byte(value)) 16 if word_len < min || word_len > max { 17 return false, fmt.Sprintf(STRING_CHARS_NOT_IN_RANGE, min, max, word_len) 18 } 19 return true, "" 20 } 21 return false, TYPE_NOT_STRING 22 } 23 } 24 25 func NewValidateStringLength(min_len int, max_len int) func(v interface{}) (bool, string) { 26 return func(v interface{}) (bool, string) { 27 if stringer, ok := v.(fmt.Stringer); ok { 28 v = stringer.String() 29 } 30 if value, ok := v.(string); ok { 31 str_len := len(value) 32 if str_len < min_len || (str_len > max_len && max_len != STRING_UNLIMIT_VALUE) { 33 return false, fmt.Sprintf(STRING_LENGHT_NOT_IN_RANGE, min_len, max_len, str_len) 34 } 35 return true, "" 36 } 37 return false, TYPE_NOT_STRING 38 } 39 } 40 func NewValidateStringRegExp(reg *regexp.Regexp) func(v interface{}) (bool, string) { 41 return func(v interface{}) (bool, string) { 42 if stringer, ok := v.(fmt.Stringer); ok { 43 v = stringer.String() 44 } 45 if value, ok := v.(string); ok { 46 if !reg.MatchString(value) { 47 return false, fmt.Sprintf(STRING_NOT_MATCH_REGEXP, reg.String()) 48 } 49 return true, "" 50 } 51 return false, TYPE_NOT_STRING 52 } 53 } 54 55 func NewEnumValidateString(enum_values ...string) func(v interface{}) (bool, string) { 56 return func(v interface{}) (bool, string) { 57 if stringer, ok := v.(fmt.Stringer); ok { 58 v = stringer.String() 59 } 60 value := fmt.Sprintf("%v", v) 61 for _, enum_value := range enum_values { 62 if value == enum_value { 63 return true, "" 64 } 65 } 66 return false, fmt.Sprintf(STRING_VALUE_NOT_IN_ENUM, enum_values, value) 67 } 68 }