随机生成器匹配正则表达式?

The*_*hat 4 regex go

是否有任何 go 包接收正则表达式作为输入并返回与该正则表达式匹配的随机字符串,或者您可以指导我如何实现这样的解决方案吗?

我的第一个想法是从 /dev/rand 循环生成随机字节,然后返回与正则表达式匹配的字节,但我认为这种强力方法会非常耗时,直到我找到一个与正则表达式匹配的字符串。

使用案例:

我计划将其用于 Web 服务测试库。

  • 一些 API 调用(例如注册用户帐户)需要独特的字段(例如电子邮件地址、电话号码等),因此需要基于模式/正则表达式的随机输入生成器。

  • 随机属性还有助于防止陈旧数据/误报(即在当前测试套件之前存储的数据)。我猜生成器不需要提供加密级别的随机性,而是需要提供 GUID 之类的东西。

Luc*_*nes 7

Reggen是我编写的一个库,可以从正则表达式生成字符串。它可用于生成您需要的电子邮件地址/电话号码,以及使用正则表达式指定的任何其他内容。

一般来说,提供的正则表达式越具体,它给出的结果就越好。例如,正则表达式.*@.*\..*可能会生成类似 的内容F$-^@A"%mk.^uv,但[a-z]+@[a-z]+\.(com|net|org)应该会生成更具可读性的内容,例如bfeujqp@qtpqby.com

生成图书馆的电子邮件地址:

import "github.com/lucasjones/reggen"

func main() {
    str, err := reggen.Generate("^[a-z]{5,10}@[a-z]{5,10}\\.(com|net|org)$", 10)
    if err != nil {
        panic(err)
    }
    fmt.Println(str)
}
Run Code Online (Sandbox Code Playgroud)

典型输出:

tpbry@sfmxet.net
Run Code Online (Sandbox Code Playgroud)