2016-03-02 77 views
3

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

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

使用案例:

我打算用这个Web服务测试库。

  • 一些API调用,例如注册一个用户帐户需要独特的领域,例如电子邮件地址,电话号码等从而根据图案/正则表达式需要一个随机输入生成的。

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

+3

你认为以下正则表达式应该提供什么样的字符串? '。*' – hek2mgl

+0

你想要一个*随机*字符串或任意字符串吗?例如,如果您每次都为给定的正则表达式返回相同的东西,那会起作用吗? – merlin2011

+0

因为你必须有非常有限的正则表达式来限制合理的输出,为什么不直接定义你想要的随机字符的格式呢? – JimB

回答

3

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

通常,提供的正则表达式越具体,它给出的结果越好。例如,正则表达式.*@.*\..*可能产生类似F$-^@A"%mk.^uv,但[a-z][email protected][a-z]+\.(com|net|org)应导致更多的东西可读像[email protected]

与库生成的电子邮件地址:

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

典型输出:

[email protected]