0

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

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

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

谢谢!

4

2 回答 2

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带有out参数的 .NET 模式。不过,作为记录,我发现这些方法设计得很糟糕。如果第一个 .NET 版本有Nullables,它们可能看起来像上面的方法。因此,请自行决定使用。

bool TryParseRegex(string input, out Regex regex) {
    try {
        regex = new Regex(input);
        return true;
    }
    catch (ArgumentException) {
        return false;
    }
}
于 2012-05-24T07:03:15.430 回答
2

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

public bool isValidRegex(string input){
     bool ret;


     ret = true;

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

     return ret;
}
于 2012-05-24T07:03:26.273 回答