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

In Golang How to generate a random string of random length within range without integers

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

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)

    }

}

编辑: 当我搜索问题时,我错过了该问题中的详细@icza answer

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

您只需定义您正在使用的字母表。类似于以下内容(您可以 fiddle with it here in the 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
}