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
|
package ctfc
import (
"regexp"
)
var SpecialCharacters = []rune{'!', '@', '#', '$', '%', '^', '&', '*'}
// Inclusive minimum and maximum
func stringValidLength(min int, max int, value string) bool {
return len(value) >= min && len(value) <= max
}
func stringValidCharacters(value string, letters bool, numbers bool, special ...rune) bool {
expr := "^["
if letters {
expr += "A-z"
}
if numbers {
expr += "0-9"
}
for _, v := range special {
expr += string(v)
}
expr += "]+$"
return regexp.MustCompile(expr).MatchString(value)
}
func stringValidRuneAmount(value string, runeStart rune, runeEnd rune, minAmount int) bool {
var sum int
for _, v := range value {
if v >= runeStart && v <= runeEnd {
sum++
}
}
return sum >= minAmount
}
func stringValidUsername(value string) bool {
return stringValidLength(2, 40, value) &&
stringValidCharacters(value, true, true, '.', '*', '_', '-') &&
(stringValidRuneAmount(value, 'A', 'Z', 1) || stringValidRuneAmount(value, 'a', 'z', 1))
}
func stringValidPassword(value string) bool {
return stringValidLength(5, 40, value) &&
stringValidCharacters(value, true, true, SpecialCharacters...) &&
stringValidRuneAmount(value, '0', '9', 1)
}
func stringValidName(value string) bool {
return stringValidLength(2, 60, value) &&
stringValidCharacters(value, true, false, ' ', '\'', '-')
}
|