github.com/profzone/eden-framework@v1.0.10/pkg/validate/validatetpl/def.go (about) 1 package validatetpl 2 3 import ( 4 "errors" 5 "reflect" 6 "regexp" 7 ) 8 9 const ( 10 MAX_UINT8 = 1<<8 - 1 11 MAX_INT8 = 1<<7 - 1 12 MAX_UINT16 = 1<<16 - 1 13 MAX_INT16 = 1<<15 - 1 14 MAX_UINT32 = 1<<32 - 1 15 MAX_INT32 = 1<<31 - 1 16 //MAX_UINT64 = 1<<64 - 1 17 MAX_UINT64 = 1<<63 - 1 // 兼容mysql driver只支持MAX 1<<63-1 18 //MAX_INT64 = 1<<63 - 1 19 MAX_INT64 = 1<<53 - 1 // 兼容浏览器只支持MAX 2<<53-1 20 // floa32最大有效位数 21 MAX_VALID_DIGIT_FLOAT32 = 7 22 // floa64最大有效位数 23 MAX_VALID_DIGIT_FLOAT64 = 15 24 ) 25 const ( 26 DEFAULT_MAX_STRING_LENGTH = 1024 27 ) 28 const ( 29 STRING_CHARS_NOT_IN_RANGE = "字符串字数不在[%d, %d]范围内,当前长度: %d" 30 STRING_LENGHT_NOT_IN_RANGE = "字符串长度不在[%d, %d]范围内,当前长度:%d" 31 STRING_VALUE_NOT_IN_ENUM = "字符串不在%v集合内,当前值:%s" 32 STRING_NOT_MATCH_REGEXP = "字符串不符合正则表达式[%s]" 33 INT_VALUE_NOT_IN_RANGE = "整形值不在%s%d, %d%s范围内,当前值:%d" 34 INT_VALUE_NOT_IN_ENUM = "整形值不在%v集合内,当前值:%d" 35 FLOAT_VALUE_NOT_IN_RANGE = "浮点值不在%s%v,%v%s范围内,当前值:%v" 36 FLOAT_VALUE_NOT_IN_ENUM = "浮点值不在%v集合内,当前值:%v" 37 FLOAT_VALUE_DIGIT_INVALID = "浮点值小数位必须为%d,总位数不能超过%d位,当前值:%v" 38 SLICE_ELEM_NUM_NOT_IN_RANGE = "切片元素个数不在[%d, %d]范围内,当前个数:%d" 39 SLICE_ELEM_INVALID = "切片元素不满足校验[%s]" 40 ) 41 const ( 42 TYPE_NOT_STRING = "非string类型" 43 TYPE_NOT_UINT8 = "非uint8类型" 44 TYPE_NOT_INT8 = "非int8类型" 45 TYPE_NOT_UINT16 = "非uint16类型" 46 TYPE_NOT_INT16 = "非int16类型" 47 TYPE_NOT_UINT32 = "非uint32类型" 48 TYPE_NOT_INT32 = "非int32类型" 49 TYPE_NOT_UINT64 = "非uint64类型" 50 TYPE_NOT_INT64 = "非int64类型" 51 TYPE_NOT_FLOAT32 = "非float32类型" 52 TYPE_NOT_FLOAT64 = "非float64类型" 53 TYPE_NOT_SLICE = "非slice类型" 54 ) 55 56 const ( 57 UNLIMIT = "unlimit" 58 STRING_UNLIMIT_VALUE = -1 59 ) 60 61 var ( 62 InvalidTypeStringError = errors.New("invalid type string error") 63 InvalidParamStringError = errors.New("invalid param string error") 64 InvalidTagStringError = errors.New("invalid tag string error") 65 Float32NoDefaultMaxError = errors.New("float32 no default max error") 66 Float64NoDefaultMaxError = errors.New("float64 no default max error") 67 InvalidTotalLenError = errors.New("invalid total length error") 68 InvalidDecimalLenError = errors.New("invalid decimal length error") 69 ) 70 71 var regexp_range_except_float_tag = regexp.MustCompile(`^@(int8|uint8|int16|uint16|int32|uint32|int64|uint64|string|char)(\[|\()\-?\d*\,|unlimit\-?\d*(\]|\))$`) 72 73 var regexp_range_float_tag = regexp.MustCompile(`^@(float32|float64)(\<\d*\,\d*\>)?((\[|\()-?\d*(\.\d*)?\,-?\d*(\.\d*)?(\]|\)))?$`) 74 75 var regexp_reg_tag = regexp.MustCompile(`^@regexp\[.+\]`) 76 77 var regexp_enum_tag = regexp.MustCompile(`^@(uint8|int8|uint16|int16|uint32|int32|uint64|int64|float32|float64|string)\{\w*(\,\w+)*\}$`) 78 79 var regexp_array_tag = regexp.MustCompile(`^@array(\[|\()\-?\d*\,\-?\d*(\]|\))(:@.*)?$`) 80 81 func getBrackets(exc_min, exc_max bool) (left_brackets, right_brackets string) { 82 left_brackets = "[" 83 right_brackets = "]" 84 if exc_min { 85 left_brackets = "(" 86 } 87 if exc_max { 88 right_brackets = ")" 89 } 90 return 91 } 92 93 func indirect(v reflect.Value) reflect.Value { 94 for { 95 if v.Kind() == reflect.Interface { 96 e := v.Elem() 97 if e.Kind() == reflect.Ptr { 98 v = e 99 continue 100 } 101 } 102 103 if v.Kind() != reflect.Ptr { 104 break 105 } 106 v = v.Elem() 107 } 108 109 return v 110 }