随机生成器匹配regexp?

时间:2016-03-02 19:46:22

标签: regex go

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

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

使用案例

我打算将它用于Web服务测试库。

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

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

1 个答案:

答案 0 :(得分:3)

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

典型输出:

tpbry@sfmxet.net