/
numeric.go
67 lines (62 loc) 路 1.47 KB
/
numeric.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package validation
import (
"reflect"
"strconv"
"strings"
"github.com/System-Glitch/goyave/v3/helper"
)
func validateNumeric(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
rv := reflect.ValueOf(value)
kind := rv.Kind().String()
switch {
case strings.HasPrefix(kind, "float"):
return true
case strings.HasPrefix(kind, "int"), strings.HasPrefix(kind, "uint") && kind != "uintptr":
floatVal, err := helper.ToFloat64(value)
ok := err == nil
if ok {
form[field] = floatVal
}
return ok
case kind == "string":
floatVal, err := strconv.ParseFloat(value.(string), 64)
ok := err == nil
if ok {
form[field] = floatVal
}
return ok
default:
return false
}
}
func validateInteger(field string, value interface{}, parameters []string, form map[string]interface{}) bool {
rv := reflect.ValueOf(value)
kind := rv.Kind().String()
switch {
case strings.HasPrefix(kind, "int"), strings.HasPrefix(kind, "uint") && kind != "uintptr":
return true
case strings.HasPrefix(kind, "float"):
if kind == "float64" {
val, _ := value.(float64)
if val-float64(int(val)) > 0 {
return false
}
form[field] = int(val)
return true
}
val, _ := value.(float32)
if val-float32(int(val)) > 0 {
return false
}
form[field] = int(val)
return true
case kind == "string":
intVal, err := strconv.Atoi(value.(string))
if err == nil {
form[field] = intVal
}
return err == nil
default:
return false
}
}