2012-05-24 98 views
0

我有一個文本框,用戶可以輸入正則表達式字符串,然後用作正則表達式匹配模式。是否有語法驗證正則表達式?

我想知道是否有方法來驗證輸入的語法? 我如何知道它是否有效正則表達式模式?

我不希望用戶能夠輸入任何東西,但只是有效的正則表達式模式。

謝謝!

+0

@KonradRudolph:是的,我認爲你是對的。先前的評論已刪除 – npinti

回答

2

您可以使用try和catch語句來測試其輸入是否損壞。

public bool isValidRegex(string input){ 
    bool ret; 


    ret = true; 

    try{ 
     new Regex(input); 
    } 
    catch (ArgumentException){ 
      ret = false; 
    } 

    return ret; 
} 
3

只需用用戶輸入創建一個新的Regex實例。

如果輸入無效,則會發生ArgumentException

編輯:由於其他答案的代碼在我看來是不必要的複雜,這裏是我的看法。

bool IsValidRegex(string input) { 
    try { 
     new Regex(input); 
     return true; 
    } 
    catch (ArgumentException) { 
     return false; 
    } 
} 

然而,我會使用此代碼,因爲要構建它的情況下正則表達式兩次:第一次測試的有效性,再後來實際使用它。 請勿這樣做。相反,使用以下命令:

Regex TryParseRegex(string input) { 
    try { 
     return new Regex(input); 
    } 
    catch (ArgumentException) { 
     return null; 
    } 
} 

現在你會得到無效的正則表達式null返回值。作爲第三種替代方法,使用.NET TryXxx模式和out參數的方法相同。儘管如此,我發現這些方法設計的很糟糕。如果第一個.NET版本有Nullable s,他們可能會看起來像上面的方法。所以用你自己的判斷。

bool TryParseRegex(string input, out Regex regex) { 
    try { 
     regex = new Regex(input); 
     return true; 
    } 
    catch (ArgumentException) { 
     return false; 
    } 
} 
+0

非常簡單:將任務傳遞給現有的引擎。 – zebediah49

+0

?!這個答案在我發佈之後被提升*甚至沒有一秒鐘*。 –

+0

謝謝康拉德! –