2012-10-26 22 views
4

我正在構建一個將命名的正則表達式保存到數據庫中的應用程序。看起來是這樣的:如何驗證輸入是否包含有效的.Net正則表達式?

Regex form

我使用Asp.Net形式。我如何驗證輸入的正則表達式?它希望用戶知道輸入的正則表達式是否不是有效的.Net正則表達式。

領域應該拒絕像值:

^Wrong(R[g[x)]]$ 
Invalid\Q&\A 
+0

有趣的問題。看這篇文章是不可能的:http://stackoverflow.com/questions/2789407/regular-expression-for-regular-expressions –

+0

這很難,因爲基本上任何東西都是正則表達式,只是不正確的正則表達式不會匹配任何東西。您可以提供一個測試箱,用戶可以在其中輸入相匹配的內容,並且可以針對此測試輸入測試輸入的正則表達式。 – Davio

+0

@DanFox,驗證不一定要通過正則表達式來完成,特別是如果這是不可能的。 –

回答

6

結交新Regex類出來。如果它拋出異常,那麼它是無效的。

try{ 
    new Regex(expression) 
} 
catch(ArgumentException ex) 
{ 
    // invalid regex 
} 

// valid regex 

我知道。使用代碼邏輯異常是錯誤的。但這似乎只是解決方案。

+1

那麼,使用例外是好的對於這樣的情況你可以用自定義的TryParse方法包裝它 – Davio

+0

:(是的,這是我的想法,但應該有更好的方法... –

+0

也許有人應該寫一個正則表達式來驗證正則表達式。 .. ;-) – Chris

2

像這樣的東西可能:

public static class RegexUtils 
{ 

    public static bool TryParse (string possibleRegex, out Regex regex) 
    { 
     regex = null; 
     try 
     { 
      regex = new Regex(possibleRegex); 
      return true; 
     } 
     catch (ArgumentException ae) 
     { 
      return false; 
     } 
    } 
} 
+0

是否有可能從異常中獲得更多反饋? –

+0

那麼,當你得到一個ArgumentException時,這意味着有一個解析錯誤。你可以捕獲ArgumentNullException - 派生自參數異常 - 專門檢查空模式。 – Davio

+0

@ KeesC.Bakker異常中有消息。 – Euphoric