RandomStringByRegex generates a random string matching the regex pattern. If optFlags is not set, fallbacks to [syntax.Perl]. NB! While the source of the randomness comes from [crypto/rand] this method is not recommended to be used on its own in critical secure contexts because the generated length
(pattern string, optFlags ...syntax.Flags)
| 25 | // |
| 26 | // This function is inspired by github.com/pipe01/revregexp, github.com/lucasjones/reggen and other similar packages. |
| 27 | func RandomStringByRegex(pattern string, optFlags ...syntax.Flags) (string, error) { |
| 28 | var flags syntax.Flags |
| 29 | if len(optFlags) == 0 { |
| 30 | flags = syntax.Perl |
| 31 | } else { |
| 32 | for _, f := range optFlags { |
| 33 | flags |= f |
| 34 | } |
| 35 | } |
| 36 | |
| 37 | r, err := syntax.Parse(pattern, flags) |
| 38 | if err != nil { |
| 39 | return "", err |
| 40 | } |
| 41 | |
| 42 | var sb = new(strings.Builder) |
| 43 | |
| 44 | err = writeRandomStringByRegex(r, sb) |
| 45 | if err != nil { |
| 46 | return "", err |
| 47 | } |
| 48 | |
| 49 | return sb.String(), nil |
| 50 | } |
| 51 | |
| 52 | func writeRandomStringByRegex(r *syntax.Regexp, sb *strings.Builder) error { |
| 53 | // https://pkg.go.dev/regexp/syntax#Op |
searching dependent graphs…