猿问

使用正则表达式验证密码

我正在尝试使用正则表达式编写密码验证函数,但不知道该怎么做。


Go 语言的标准 API 提供的 regex 包与其他语言不同。


有人知道这个正则表达式模式应该是什么样子吗?


该模式应验证:


/*

 * Password rules:

 * at least 7 letters

 * at least 1 number

 * at least 1 upper case

 * at least 1 special character

 */


叮当猫咪
浏览 280回答 3
3回答

莫回无

正确的正则表达式是……这里没有正则表达式。您可以定义一个自定义函数来验证密码,并将其与其他有助于验证字段的框架结合使用,例如mccoyst/validate(在关于参数验证的讨论中提到)你也有go-validator/validator允许定义类似的验证(但我仍然会使用自定义验证器而不是一个或几个正则表达式)。注意:go regexp基于re2,一个高效的、有原则的正则表达式库)。因此,主要的权衡是没有反向引用,例如:(abc)\1并且没有匹配的后视。作为交换,您将获得高速正则表达式。

ABOUTYOU

这实际上是不可能的,因为 Go 的正则表达式不支持回溯。但是,它很容易实现,一个简单的例子:func verifyPassword(s string) (sevenOrMore, number, upper, special bool) {    letters := 0    for _, c := range s {        switch {        case unicode.IsNumber(c):            number = true        case unicode.IsUpper(c):            upper = true            letters++        case unicode.IsPunct(c) || unicode.IsSymbol(c):            special = true        case unicode.IsLetter(c) || c == ' ':            letters++        default:            //return false, false, false, false        }    }    sevenOrMore = letters >= 7    return}
随时随地看视频慕课网APP

相关分类

Go
我要回答