首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用regexp验证密码

用regexp验证密码
EN

Stack Overflow用户
提问于 2014-09-14 19:35:52
回答 6查看 13.6K关注 0票数 13

我试图用regexp编写密码验证函数,但不知道如何实现。

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

有人知道,这个regexp模式应该是什么样子的?

模式应验证:

代码语言:javascript
复制
/*
 * Password rules:
 * at least 7 letters
 * at least 1 number
 * at least 1 upper case
 * at least 1 special character
 */
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-09-14 19:46:30

正确的方法是..。这里没有雷杰普。

您可以定义一个自定义函数来验证密码,并将其与帮助验证字段的其他框架(如mccoyst/验证 (在本关于参数验证的探讨中提到)结合起来)。

您还可以使用go-验证器/验证器来定义类似的验证(但我仍然使用自定义验证器,而不是一个或多个regexp)。

注意:去雷杰普基于re2,这是一个高效、有原则的正则表达式库)。

因此,主要的权衡是,不反向引用,,例如:(abc)\1,没有匹配的查找-后面的。 作为交换,您可以获得高速正则表达式

票数 13
EN

Stack Overflow用户

发布于 2014-09-15 02:43:33

这实际上是不可能的,因为Go的regex不支持回溯。

但是,它很容易实现,这是一个简单的例子:

代码语言:javascript
复制
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
}
票数 32
EN

Stack Overflow用户

发布于 2019-05-14 22:30:34

根据邻近的答案,我也编写了一个对我很好的帮助函数。这一个只是假定总的密码长度是令人满意的。看看下面的..。

代码语言:javascript
复制
func isValid(s string) bool {
    var (
        hasMinLen  = false
        hasUpper   = false
        hasLower   = false
        hasNumber  = false
        hasSpecial = false
    )
    if len(s) >= 7 {
        hasMinLen = true
    }
    for _, char := range s {
        switch {
        case unicode.IsUpper(char):
            hasUpper = true
        case unicode.IsLower(char):
            hasLower = true
        case unicode.IsNumber(char):
            hasNumber = true
        case unicode.IsPunct(char) || unicode.IsSymbol(char):
            hasSpecial = true
        }
    }
    return hasMinLen && hasUpper && hasLower && hasNumber && hasSpecial
}
代码语言:javascript
复制
isValid("pass")     // false
isValid("password") // false
isValid("Password") // false
isValid("P@ssword") // false
isValid("P@ssw0rd") // true
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25837241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档