2010-06-28 15 views
14

在我的應用程序中,用戶可以將自己的正則表達式模式輸入到文本框中,以便他可以強制某個輸入用於其他用戶/文本框。用戶有可能看到一個與他所輸入的正則表達式匹配的字符串的例子嗎?例如,如果他要輸入:^[A-Z]{2}$,它將生成一個字符串,如「XX」,以向用戶顯示他只能輸入兩個大寫字母。是否有可能基於正則表達式模式生成示例字符串?

如果沒有簡單的方法來完成這個(我假設沒有),那麼構建起來會有多困難?或者做這樣的事情已經存在?

+0

請參閱http://stackoverflow.com/questions/205411/random-string-that-matches-a-regexp,它可能會幫助你。 – Shimrod 2010-06-28 09:25:43

回答

8

結帳Xeger。它看起來可以做你想做的事。它雖然在Java中。

下面是從測試套件的一個示例:

@Test 
    public void shouldGenerateTextCorrectly() { 
     String regex = "[ab]{4,6}c"; 
     Xeger generator = new Xeger(regex); 
     for (int i = 0; i < 100; i++) { 
      String text = generator.generate(); 
      assertTrue(text.matches(regex)); 
     } 
    } 

更新:得益於尼科斯Baxevanis,所述dk.brics.automaton已被移植到C#https://github.com/moodmosaic/Fare

+0

這正是我正在尋找..但對於C#。至少我有一些我可以用作參考的東西。 – Fusyion 2010-06-28 09:39:28

+0

Xeger僅僅是一個圍繞http://www.brics.dk/~amoeller/automaton/的薄包裝,它是一些正則表達式操作的DFA/NFA實現。也許有類似C#的地方可用的東西? – 2010-06-28 09:52:08

+1

@MartinWickman是的,dk.brics.automaton和xeger源碼都已經移植到C#上https://github.com/moodmosaic/Fare – 2012-11-08 18:14:33

7

對於C#你也可以看看項目Fare。欲瞭解更多詳情,請看this的答案。

var regex = @"((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)"; 
var xeger = new Xeger(regex); 

var result = Regex.IsMatch(xeger.Generate(), regex); 
// -> Prints 'true' 
+0

Nikos,如果你使用票價顯示代碼示例 – 2014-08-18 15:57:03

+0

阿爾貝託,我剛剛添加了一個例子。希望有所幫助。 – 2014-08-18 19:54:58

0

我曾經需要這樣的東西太多,所以我使用上述xeger LIB創建了一個簡單的程序使用GUI。只需從dist文件夾運行.jar(jre是必需的) https://github.com/ogyct/SampleFromRegex

相關問題