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))
|
|||
|
}
|