• 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)


    要在 Go 中编写密码校验规则,确保密码不少于8位且包含数字和字母,你可以使用正则表达式和 Go 的 regexp 包来实现。以下是一个示例代码

    错误示范

    package main
    
    import (
        "fmt"
        "regexp"
    )
    
    func validatePassword(password string) bool {
        // 定义正则表达式,要求密码至少包含一个数字和一个字母,并且至少8位长度
        regexPattern := "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$"
        regex := regexp.MustCompile(regexPattern)
    
        // 使用正则表达式进行匹配
        return regex.MatchString(password)
    }
    
    func main() {
        password1 := "Password123" // 合法密码,包含数字和字母,长度大于等于8
        password2 := "abc123"      // 不合法密码,长度不足8
        password3 := "abcdefg"     // 不合法密码,没有数字
        password4 := "12345678"    // 不合法密码,没有字母
    
        fmt.Printf("Password1: %v\n", validatePassword(password1))
        fmt.Printf("Password2: %v\n", validatePassword(password2))
        fmt.Printf("Password3: %v\n", validatePassword(password3))
        fmt.Printf("Password4: %v\n", validatePassword(password4))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这个示例中,validatePassword 函数接受一个密码字符串作为参数,并使用正则表达式来检查密码是否满足要求。正则表达式 ^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$ 要求密码至少包含一个数字和一个字母,并且长度至少为8位。

    你可以根据需要调用 validatePassword 函数来验证用户输入的密码是否符合规则。上面的示例在 main 函数中演示了如何使用它来验证不同的密码。

    报错信息

    panic: regexp: Compile(^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$): error parsing regexp: invalid or unsupported Perl syntax: (?=

    原因

    regexp 不支持的Perl语法, 可以改用github.com/dlclark/regexp2

    正确代码

    package main
    
    import (
    	"Test/Module"
    	"fmt"
    	"github.com/dlclark/regexp2"
    	"regexp"
    	"time"
    )
    
    func validatePassword(password string) bool {
    	// 定义正则表达式,要求密码至少包含一个数字和一个字母,并且至少8位长度
    	regexPattern := "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$"
    	regex := regexp.MustCompile(regexPattern)
    
    	// 使用正则表达式进行匹配
    	return regex.MatchString(password)
    }
    
    func regexpMatch(matchStr string) bool {
    	regexPattern := "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$"
    	reg, _ := regexp2.Compile(regexPattern, 0)
    	m, err := reg.FindStringMatch(matchStr)
    	if err != nil {
    		return false
    	}
    	return m != nil
    }
    
    func main() {
        password1 := "Password123" // 合法密码,包含数字和字母,长度大于等于8
        password2 := "abc123"      // 不合法密码,长度不足8
        password3 := "abcdefg"     // 不合法密码,没有数字
        password4 := "12345678"    // 不合法密码,没有字母
    
        fmt.Printf("Password1: %v\n", regexpMatch(password1))
        fmt.Printf("Password2: %v\n", regexpMatch(password2))
        fmt.Printf("Password3: %v\n", regexpMatch(password3))
        fmt.Printf("Password4: %v\n", regexpMatch(password4))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    输出

    Password1: true
    Password2: false
    Password3: false
    Password4: false

  • 相关阅读:
    centos怎么禁用和关闭selinux
    拿到大厂前端offer的前端开发是怎么回答面试题的
    【论文解读】GPT Understands, Too
    【PDF合并】利用 Python 合并 PDF 文件
    上述代码的程序具体流程是什么
    uniapp 轮播图 预览图片转圈问题
    游戏设计模式专栏(九):用装饰模式定制化游戏元素
    Redis入门与应用
    stm32 LWIP开发-1-
    R语言实战应用精讲50篇(二十三)-贝叶斯理论重要概念: 可信度Credibility, 模型Models, 和参数Parameters
  • 原文地址:https://blog.csdn.net/weixin_41093846/article/details/132803420