第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正則表達式的 Github 用戶名約定

使用正則表達式的 Github 用戶名約定

Go
慕森卡 2023-07-31 17:14:35
我已經(jīng)嘗試在 Go 中使用正則表達式轉(zhuǎn)換 Github 用戶名約定有一段時間了,但我無法做到。另外,用戶名長度不應超過 39 個字符。以下是來自 Github 的用戶名約定用戶名只能包含字母數(shù)字字符或單個連字符,并且不能以連字符開頭或結(jié)尾。和長度用戶名太長(最多 39 個字符)。這是我寫的代碼。你可以在Go Playground中查看package mainimport (    "fmt"    "regexp")func main() {    usernameConvention := "^[a-zA-Z0-9]*[-]?[a-zA-Z0-9]*$"    if re, _ := regexp.Compile(usernameConvention); !re.MatchString("abc-abc") {        fmt.Println("false")    } else {        fmt.Println("true")    }}目前,我可以實現(xiàn)這些:a-b // true - Working!-ab // false - Working!ab- // false - Working!0-0 // true - Working!但我面臨的問題是我找不到適用于以下場景的正則表達式模式:a-b-c // false - Should be true此外,它必須在 39 個字符以內(nèi),我發(fā)現(xiàn)我們可以使用{1,38},但我不知道應該在正則表達式模式中將其添加到哪里。
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經(jīng)驗 獲得超11個贊

在基于 Go RE2 的正則表達式中,您不能使用環(huán)視,因此只能使用另一個正則表達式或常規(guī)字符串長度檢查來檢查長度限制。

完全非正則表達式的方法(演示):

package main


import (

    "fmt"

    "strings"

)

func IsAlnumOrHyphen(s string) bool {

    for _, r := range s {

        if (r < 'a' || r > 'z') && (r < 'A' || r > 'Z') && (r < '0' || r > '9') && r != '-' {

            return false

        }

    }

    return true

}


func main() {

    s := "abc-abc-abc"

    if  len(s) < 40 && len(s) > 0 && !strings.HasPrefix(s, "-") && !strings.Contains(s, "--") && !strings.HasSuffix(s, "-") && IsAlnumOrHyphen(s) {

        fmt.Println("true")

    } else {


        fmt.Println("false")

    }

}

細節(jié)

  • len(s) < 40 && len(s) > 0- 長度限制,允許 1 到 39 個字符

  • !strings.HasPrefix(s, "-")- 不應以-

  • !strings.Contains(s, "--")- 不應包含--

  • !strings.HasSuffix(s, "-")- 不應以以下結(jié)尾-

  • IsAlnumOrHyphen(s)- 只能包含 ASCII 字母數(shù)字和連字符。

對于部分正則表達式方法,請參閱此 Go 演示

package main


import (

    "fmt"

    "regexp"

)


func main() {

    usernameConvention := "^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$"

    re,_ := regexp.Compile(usernameConvention)

    s := "abc-abc-abc"

    if len(s) < 40 && len(s) > 0 && re.MatchString(s) {

        fmt.Println("true")

    } else {


        fmt.Println("false")

    }

}

在這里,^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$正則表達式匹配

  • ^- 字符串的開頭

  • [a-zA-Z0-9]+- 1 個或多個 ASCII 字母數(shù)字字符

  • (?:-[a-zA-Z0-9]+)*- 0 次或多次重復-,然后是 1 次或更多 ASCII 字母數(shù)字字符

  • $- 字符串末尾。


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關(guān)注
  • 248 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號