我有一個像這樣的正則運算式
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
uj5u.com熱心網友回復:
您不需要錨點、非捕獲組,也不需要負前瞻。只需匹配并捕獲任何字符 ( (.)) 后跟其自身 ( \\1)。
REGEX_2_SAME_CHARACTER_IN_A_ROW = "(.)\\1"
但這給我們帶來了下一個問題:Go 正則運算式不支持反向參考,因此您需要找到不同的解決方案。一種是自己回圈字串。
這是一個簡單回圈的解決方案:
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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524284.html
標籤:正则表达式去句法
