regex - 是否可以在单个正则表达式中执行所有这些字符串验证?

标签 regex go

我想弄清楚我是否可以将所有这些语句组合成一个正则表达式检查,但我不是特别精通正则表达式,在这些单独的检查中这样做是我迄今为止最好的:

func ValidatePwd(pwd string) error {
    pwdRuneCount := utf8.RuneCountInString(pwd)
    containsAtLeastOneDigit, err := regexp.MatchString("[0-9]", pwd)
    if err != nil {
        return err
    }
    containsAtLeastOneLowercase, err := regexp.MatchString("[a-z]", pwd)
    if err != nil {
        return err
    }
    containsAtLeastOneUppercase, err := regexp.MatchString("[A-Z]", pwd)
    if err != nil {
        return err
    }
    containsAtLeastOneNonWordChar, err := regexp.MatchString(`[\W]`, pwd)
    if err != nil {
        return err
    }
    if pwdRuneCount < PwdMinRuneCount || pwdRuneCount > PwdMaxRuneCount || !containsAtLeastOneDigit || !containsAtLeastOneLowercase || !containsAtLeastOneUppercase || !containsAtLeastOneNonWordChar {
        return PwdErr
    }
    return nil
}

最佳答案

这是可能的,但它会很难看。一个正则表达式必须包含 24 个形式为 [0-9].*[a-z].*[A-Z].*\W 的子表达式,以匹配每个可能的顺序,其中四个需要可能会出现字符类型。你现在做的方式好多了。

顺便说一句,与其检查 MatchString 调用的错误(这意味着正则表达式无效),不如使用 regexp.MustCompile 预编译它们,如果正则表达式无效,它会出现 panic 。

关于regex - 是否可以在单个正则表达式中执行所有这些字符串验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40194141/

相关文章:

regex - 我如何在Python中使用F字符串和正则表达式

regex - Bash:用于查找具有双引号的模式的正则表达式

sockets - Golang 将 gopacket udpLayer 转换为字节并发送

elasticsearch - 我如何使用 olivere 的弹性 client.Update() 服务来更改数组字段、通用字符串字段和可能的嵌套结构字段?

go - 如何通过命令行找出 go.mod 中的依赖项属于哪个 git-branch?

Python 正则表达式 : how to do a negative lookahead with a string which don't start immediately?

regex - 在 R 中的两个特定单词之间提取一串单词

javascript - 使用jquery获取<tag>的内容

go - 如何检查我的程序是为 32 位还是 64 位处理器编译的?

go - 如何应用 kubernetes 工作负载