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