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

在Golang中如何在没有整数的范围内生成随机长度的随机字符串

在Golang中如何在没有整数的范围内生成随机长度的随机字符串

Go
慕雪6442864 2022-11-23 14:22:57

我试图用正则表达式从生成的字符串中删除整数,但这不会给我所需范围内的长度(许多会小于最小值)


package main


import (

    "fmt"

    "log"

    "math/rand"

    "regexp"

    "time"

)


func randomString(length int) string {

    rand.Seed(time.Now().UnixNano())

    b := make([]byte, length)

    rand.Read(b)

    return fmt.Sprintf("%x", b)[:length]

}

func randomLength(minL, maxL int) int {

    rand.Seed(time.Now().UnixNano())


    return rand.Intn(maxL-minL) + minL

}


func main() {

    reg, err := regexp.Compile("[^a-zA-Z]+")

    if err != nil {

        log.Fatal(err)

    }


    for i := 0; i < 10; i++ {

        processedString := reg.ReplaceAllString(randomString(randomLength(8, 16)), "")

        println(processedString)


    }


}


查看完整描述

2 回答

?
一只斗牛犬

TA贡献1522条经验 获得超2个赞

var seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))


func StringWithCharset(length int, charset string) string {

    b := make([]byte, length)

    for i := range b {

        b[i] = charset[seededRand.Intn(len(charset)-1)]

    }

    return string(b)

}


func main() {

    rangeStart := 0

    rangeEnd := 10

    offset := rangeEnd - rangeStart

    randLength := seededRand.Intn(offset) + rangeStart


    charSet := "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ"

    randString := StringWithCharset(randLength, charSet)

}


查看完整回答
反对 回复 2022-11-23
?
米琪卡哇伊

TA贡献1697条经验 获得超6个赞

您只需要定义您正在使用的字母表。类似于以下内容(您可以在 Go Playground 中摆弄它)。


package main


import (

  "fmt"

  "math/rand"

  "strings"

  "time"

)


func main() {


  rand.Seed(time.Now().UnixNano())


  var alphabet []rune = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")


  rs := randomString(20, alphabet)

  fmt.Printf("This is pretty random: %s\n", rs)


}


func randomString(n int, alphabet []rune) string {


  alphabetSize := len(alphabet)

  var sb strings.Builder


  for i := 0; i < n; i++ {

    ch := alphabet[rand.Intn(alphabetSize)]

    sb.WriteRune(ch)

  }


  s := sb.String()

  return s

}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

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