57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package validator
|
||
|
||
import (
|
||
"errors"
|
||
"strconv"
|
||
"unicode"
|
||
)
|
||
|
||
type password struct {
|
||
minlength int
|
||
maxlength int
|
||
upSymbol int
|
||
}
|
||
|
||
func NewValidator(min int, max int, up int) *password {
|
||
return &password{
|
||
minlength: min,
|
||
maxlength: max,
|
||
upSymbol: up,
|
||
}
|
||
}
|
||
|
||
func (p *password) CheckValid(password string) (bool, error) {
|
||
var Upper int
|
||
if len(password) < p.minlength {
|
||
return false, p.errorMinSymbol()
|
||
}
|
||
if len(password) > p.maxlength {
|
||
return false, p.errorMaxSymbol()
|
||
}
|
||
for _, char := range password {
|
||
if unicode.IsUpper(char) {
|
||
Upper++
|
||
break
|
||
|
||
}
|
||
}
|
||
|
||
if Upper < p.upSymbol {
|
||
return false, p.errorUpperSymbol()
|
||
}
|
||
return true, nil
|
||
}
|
||
|
||
func (p *password) errorMinSymbol() error {
|
||
|
||
return errors.New("Слижком короткий пароль, минимальное количество : " + strconv.Itoa(p.minlength))
|
||
}
|
||
func (p *password) errorMaxSymbol() error {
|
||
|
||
return errors.New("Превышен допустимый лимит символов, максимальное количество : " + strconv.Itoa(p.maxlength))
|
||
}
|
||
func (p *password) errorUpperSymbol() error {
|
||
|
||
return errors.New("В пароле должны быть символ верхнего регистра, количество : " + strconv.Itoa(p.upSymbol))
|
||
}
|