为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式验证密码

使用正则表达式验证密码

Go
叮当猫咪 2021-08-16 18:36:54
我正在尝试使用正则表达式编写密码验证函数,但不知道该怎么做。Go 语言的标准 API 提供的 regex 包与其他语言不同。有人知道这个正则表达式模式应该是什么样子吗?该模式应验证:/* * Password rules: * at least 7 letters * at least 1 number * at least 1 upper case * at least 1 special character */
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

正确的正则表达式是……这里没有正则表达式。

您可以定义一个自定义函数来验证密码,并将其与其他有助于验证字段的框架结合使用,例如mccoyst/validate(在关于参数验证的讨论中提到)

你也有go-validator/validator允许定义类似的验证(但我仍然会使用自定义验证器而不是一个或几个正则表达式)。


注意:go regexp基于re2,一个高效的、有原则的正则表达式库)。

因此,主要的权衡是没有反向引用,例如:(abc)\1并且没有匹配的后视
作为交换,您将获得高速正则表达式


查看完整回答
反对 回复 2021-08-16
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

这实际上是不可能的,因为 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

}


查看完整回答
反对 回复 2021-08-16
  • 3 回答
  • 0 关注
  • 279 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信