2016-03-02 20 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]