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

时间:2016-10-22 15:59:21

标签: 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
}

1 个答案:

答案 0 :(得分:2)

这是可能的,但它会很难看。单个正则表达式必须包含24个Size Inspector形式的子表达式,以匹配可能发生四种所需字符类型的每个可能顺序。你现在的做法要好得多。

顺便说一句,您可能应该使用[0-9].*[a-z].*[A-Z].*\W预编译它们,而不是检查MatchString调用中的错误(这意味着正则表达式无效),如果正则表达式无效则会发生混乱