前言
由于golang不支持预查之类的正则匹配规则,regex包不支持?=之类的格式,复杂的正则匹配难以实现,可以使用开源包regex2
一、安装包go get github.com/dlclark/regexp2 二、使用
代码如下(示例):
func matchStr(str string) string {
expr := `^(?![0-9a-zA-Z]+$)(?![a-zA-Z!@#$%^&*]+$)(?![0-9!@#$%^&*]+$)[0-9A-Za-z!@#$%^&*]{8,16}$`
reg, _ := regexp2.Compile(expr, 0)
m, _ := reg.FindStringMatch(str)
if m != nil {
res:= m.String()
return res
}
return "密码包含至少一位数字,字母和特殊字符,且长度8-16"
}
三、解释
“^(?![0-9a-zA-Z]+$)(?![a-zA-Z!@#$%^&*]+$)(?![0-9!@#$%^&*]+$)[0-9A-Za-z!@#$%^&*]{8,16}$”中:
(?![0-9a-zA-Z]+$) 表示匹配后面非数字,非字母的字符
(?![a-zA-Z!@#$%^&*]+$) 表示匹配后面非字母,非特殊字符的字符
(?![0-9!@#$%^&*]+$) 表示匹配后面非数字,非特殊字符的字符
[0-9A-Za-z!@#$%^&*]{8,16} 表示长度8-16,可以是任意的数字,字母和其中包含的特殊字符
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)