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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用正則表達(dá)式的 Github 用戶名約定

使用正則表達(dá)式的 Github 用戶名約定

Go
慕森卡 2023-07-31 17:14:35
我已經(jīng)嘗試在 Go 中使用正則表達(dá)式轉(zhuǎn)換 Github 用戶名約定有一段時(shí)間了,但我無(wú)法做到。另外,用戶名長(zhǎng)度不應(yīng)超過(guò) 39 個(gè)字符。以下是來(lái)自 Github 的用戶名約定用戶名只能包含字母數(shù)字字符或單個(gè)連字符,并且不能以連字符開頭或結(jié)尾。和長(zhǎng)度用戶名太長(zhǎng)(最多 39 個(gè)字符)。這是我寫的代碼。你可以在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")    }}目前,我可以實(shí)現(xiàn)這些:a-b // true - Working!-ab // false - Working!ab- // false - Working!0-0 // true - Working!但我面臨的問(wèn)題是我找不到適用于以下場(chǎng)景的正則表達(dá)式模式:a-b-c // false - Should be true此外,它必須在 39 個(gè)字符以內(nèi),我發(fā)現(xiàn)我們可以使用{1,38},但我不知道應(yīng)該在正則表達(dá)式模式中將其添加到哪里。
查看完整描述

1 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

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

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

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")

    }

}

細(xì)節(jié)

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

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

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

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

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

對(duì)于部分正則表達(dá)式方法,請(qǐng)參閱此 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]+)*$正則表達(dá)式匹配

  • ^- 字符串的開頭

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

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

  • $- 字符串末尾。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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