aboutsummaryrefslogtreecommitdiff
path: root/go-src/windows/dataValidations.go
blob: 3df61c1ac7bb74537f2702bff83769d98cc77b71 (plain) (blame)
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 windows

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, ' ', '\'', '-')
}