golang: パスワードには数字、大文字、小文字、特殊文字を使用できますが、少なくとも 2 つが含まれ、長さは 8 ~ 16 です (4 つの記号のうち 3 つを満たすことができます)。

要件: パスワードには数字、大文字、小文字、特殊文字 (.@$!%*#_~?&^) を使用できますが、少なくとも 2 文字が含まれ、長さは 8 ~ 16 ( 4つの記号のいずれか 3つの条件を満たすだけ)

package main

import (
	"fmt"
	"regexp"
)


// 密码校验规则: 必须包含数字、大写字母、小写字母、特殊字符(如.@$!%*#_~?&^)至少3种的组合且长度在8-16之间
func VerifyPassword(minLength, maxLength int, pwd string) bool {
    
    
	if len(pwd) < minLength || len(pwd) > maxLength {
    
    
		return false
	}
	// 过滤掉这四类字符以外的密码串,直接判断不合法
	re, err := regexp.Compile(`^[a-zA-Z0-9.@$!%*#_~?&^]{8,16}$`)
	if err != nil {
    
    
		return false
	}
	match := re.MatchString(pwd)
	if !match {
    
    
		return false
	}

	var level = 0
	patternList := []string{
    
    `[0-9]+`, `[a-z]+`, `[A-Z]+`, `[.@$!%*#_~?&^]+`}
	for _, pattern := range patternList {
    
    
		match, _ := regexp.MatchString(pattern, pwd)
		if match {
    
    
			level++
		}
	}
	if level < 3 {
    
    
		return false
	}

	return true
}

おすすめ

転載: blog.csdn.net/qq_38923792/article/details/123988887