2012-05-24 115 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

谢谢康拉德! –