-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncs.go
151 lines (127 loc) · 4.23 KB
/
funcs.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package validator
import (
"mime/multipart"
"regexp"
"strconv"
"strings"
"github.com/gabriel-vasile/mimetype"
"github.com/inhies/go-bytesize"
)
// IsUsername check if string is valid username
func IsUsername(username string) bool {
r := regexp.MustCompile(`^[0-9a-zA-Z\-\._]+$`)
return r.MatchString(username)
}
// IsTel check if string is valid tel (IR numbers)
func IsTel(tel string) bool {
rx := regexp.MustCompile(`[\d]+`)
rm := regexp.MustCompile(`^0\d{10}$`)
return rm.MatchString(strings.Join(rx.FindAllString(tel, -1), ""))
}
// IsMobile check if string is valid mobile number (IR numbers)
func IsMobile(mobile string) bool {
rx := regexp.MustCompile(`[\d]+`)
rm := regexp.MustCompile(`^09\d{9}$`)
return rm.MatchString(strings.Join(rx.FindAllString(mobile, -1), ""))
}
// IsPostalcode check if string is valid postal code
func IsPostalcode(postalCode string) bool {
rx := regexp.MustCompile(`[\d]+`)
rm := regexp.MustCompile(`^\d{10}$`)
return rm.MatchString(strings.Join(rx.FindAllString(postalCode, -1), ""))
}
// IsIdentifier check if string is valid identifier
func IsIdentifier(id string) bool {
idf, err := strconv.Atoi(id)
return err == nil && idf > 0
}
// IsUnsigned check if string is unsigned number
func IsUnsigned(num string) bool {
idf, err := strconv.Atoi(num)
return err == nil && idf >= 0
}
// IsIDNumber check if string is valid id number
func IsIDNumber(idNum string) bool {
r := regexp.MustCompile(`^\d{1,10}$`)
return r.MatchString(idNum)
}
// IsNationalCode check if string is valid national code
func IsNationalCode(idNum string) bool {
rx := regexp.MustCompile(`[\d]+`)
rm := regexp.MustCompile(`^\d{10}$`)
return rm.MatchString(strings.Join(rx.FindAllString(idNum, -1), ""))
}
// IsCreditCardNumber check if string is valid credit card number
func IsCreditCardNumber(num string) bool {
rx := regexp.MustCompile(`[\d]+`)
rm := regexp.MustCompile(`^(\d{16})|(\d{20})$`)
return rm.MatchString(strings.Join(rx.FindAllString(num, -1), ""))
}
// IsIBAN check if string is valid iban number
func IsIBAN(num string) bool {
rx := regexp.MustCompile(`[\d]+`)
rm := regexp.MustCompile(`^(\d{24})$`)
return rm.MatchString(strings.Join(rx.FindAllString(num, -1), ""))
}
// IsUUID check if string is valid uuid
func IsUUID(uuid string) bool {
r := regexp.MustCompile("^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[8|9|aA|bB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$")
return r.MatchString(uuid)
}
// IsIP check if address if a valid ip
func IsIP(address string) bool {
r := regexp.MustCompile(`^(([0–9]|[1–9][0–9]|1[0–9]{2}|2[0–4][0–9]|25[0–5])\.){3}([0–9]|[1–9][0–9]|1[0–9]{2}|2[0–4][0–9]|25[0–5])$`)
return r.MatchString(address)
}
// IsIPPort check if address if a valid ip contains port
func IsIPPort(address string) bool {
r := regexp.MustCompile(`^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):[0-9]+$`)
return r.MatchString(address)
}
// ValidateUploadSize check if file size in range
// use B, KB, MB, GB for size string
// ex: 1KB, 3MB
// Note: not use float point!
func ValidateUploadSize(file *multipart.FileHeader, min string, max string) (bool, error) {
minSize, err := bytesize.Parse(min)
if err != nil {
return false, err
}
maxSize, err := bytesize.Parse(max)
if err != nil {
return false, err
}
return (uint64(file.Size) >= uint64(minSize) && uint64(file.Size) <= uint64(maxSize)), nil
}
// ValidateUploadMime check if file upload mime is valid
func ValidateUploadMime(file *multipart.FileHeader, mimes ...string) (bool, error) {
f, err := file.Open()
if err != nil {
return false, err
}
defer f.Close()
if mime, err := mimetype.DetectReader(f); err != nil {
return false, err
} else if mime != nil {
return mimetype.EqualsAny(mime.String(), mimes...), nil
}
return false, nil
}
// ValidateUploadExt check if file upload extension is valid
func ValidateUploadExt(file *multipart.FileHeader, exts ...string) (bool, error) {
f, err := file.Open()
if err != nil {
return false, err
}
defer f.Close()
if mime, err := mimetype.DetectReader(f); err != nil {
return false, err
} else if mime != nil {
for _, ext := range exts {
if strings.EqualFold(ext, mime.Extension()) {
return true, nil
}
}
}
return false, nil
}