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

如何检查一个字符串是否连续包含 2 个相同的字符?

如何检查一个字符串是否连续包含 2 个相同的字符?

Go
慕标5832272 2023-03-07 16:46:04
我有这样的正则表达式REGEX_2_SAME_CHARACTER_IN_A_ROW = "^(?:(.)(?!\\1\\1))*$"并使用该正则表达式检查密码是否连续包含 2 个相同的字符contain2SameCharacterInARow, err := regexp.MatchString(REGEX_2_SAME_CHARACTER_IN_A_ROW, password)但我得到这个错误error match regex 2 same char in a row: error parsing regexp: invalid or unsupported Perl syntax: `(?!`我读过其他使用 regexp.MustCompile 的问题,但我不知道如何处理或编码,有没有人可以帮助我解决这个问题?在这里您可以查看我的完整代码以验证密码 https://play.golang.com/p/5Fj4-UPvL8s
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

您不需要锚点、非捕获组或负面前瞻。只需匹配并捕获任何字符 ( (.)) 后跟自身 ( \\1)。

REGEX_2_SAME_CHARACTER_IN_A_ROW = "(.)\\1"

但这给我们带来了下一个问题:Go regexes do not support back references,所以你需要找到一个不同的解决方案。一个是自己循环字符串。

这是一个简单循环的解决方案:

package main


import (

    "errors"

    "fmt"

    "strings"

)


func main() {

    fmt.Println(ValidatePassword("passsword01"))

}


func ContainsRepeatedChar(s string) bool {

    chars := strings.Split(s, "")

    char := chars[0]

    for i := 1; i < len(chars); i++ {

        if (chars[i] == char) {

            return true

        }

        char = chars[i]

    }

    return false

}


func ValidatePassword(password string) error {

    contain2SameCharacterInARow := ContainsRepeatedChar(password)

    if contain2SameCharacterInARow {

        fmt.Println("duplicated char")

        return errors.New("invalid password")

    }


    fmt.Println("all good")

    return nil

}


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

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