github.com/infraboard/keyauth@v0.8.1/common/password/validater.go (about) 1 package password 2 3 import ( 4 "regexp" 5 ) 6 7 // Validater 校验器 8 type Validater interface { 9 Reset(pass string) 10 IncludeNumbers() bool 11 IncludeLowercaseLetters() bool 12 IncludeUppercaseLetters() bool 13 IncludeSymbols() bool 14 LengthOK(limit int) bool 15 } 16 17 // NewValidater 生产检查器 18 func NewValidater(pass string) Validater { 19 return &validater{ 20 pass: pass, 21 numReg: `[0-9]{1}`, 22 lowerReg: `[a-z]{1}`, 23 upperReg: `[A-Z]{1}`, 24 symbolsReg: `[!@#~$%^&*()+|_]{1}`, 25 } 26 } 27 28 // Validater 校验密码强度 29 type validater struct { 30 pass string 31 numReg string 32 lowerReg string 33 upperReg string 34 symbolsReg string 35 } 36 37 func (v *validater) Reset(pass string) { 38 v.pass = pass 39 } 40 41 // IncludeNumbers 是否包含数字 42 func (v *validater) IncludeNumbers() bool { 43 return v.match(v.numReg) 44 } 45 46 // IncludeLowercaseLetters 是否包含小写字母 47 func (v *validater) IncludeLowercaseLetters() bool { 48 return v.match(v.lowerReg) 49 } 50 51 // IncludeUppercaseLetters 是否包含大写字母 52 func (v *validater) IncludeUppercaseLetters() bool { 53 return v.match(v.upperReg) 54 } 55 56 // IncludeSymbols 是否包含特殊字符 57 func (v *validater) IncludeSymbols() bool { 58 return v.match(v.symbolsReg) 59 } 60 61 // LengthOK 长度是否合法 62 func (v *validater) LengthOK(limit int) bool { 63 return len(v.pass) >= limit 64 } 65 66 func (v *validater) match(reg string) bool { 67 if b, err := regexp.MatchString(reg, v.pass); !b || err != nil { 68 return false 69 } 70 71 return true 72 }