Regex有语法验证器吗?

时间:2012-05-24 06:59:41

标签: c#

我有一个文本框,用户可以在其中输入正则表达式字符串,然后将其用作正则表达式匹配模式。

我想知道是否有办法验证输入的语法? 我怎么知道它是否是有效的正则表达式模式?

我不希望用户能够输入任何内容,只是有效的正则表达式。

谢谢!

2 个答案:

答案 0 :(得分: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返回值。作为第三种选择,这里使用带有TryXxx参数的.NET out模式的方法相同。尽管如此,我发现这些方法设计得很糟糕。如果第一个.NET版本有Nullable s,它们可能看起来像上面的方法。因此,请自行决定使用。

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

答案 1 :(得分:2)

您可以使用try和catch语句来测试其输入是否已损坏。

public bool isValidRegex(string input){
     bool ret;


     ret = true;

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

     return ret;
}