我允许用户输入正则表达式来匹配IP地址,以便在相关系统中进行IP过滤。我想验证输入的正则表达式是否有效,因为许多用户会出于好意搞乱op。
当然,我可以在try/catch中执行一个Regex.IsMatch(),看看它是否会以这种方式爆炸,但是有没有更聪明的方法呢?速度本身并不是问题,我只是更喜欢避免无端抛出异常。
发布于 2008-10-20 06:51:18
只要捕捉到非常具体的异常,只需执行try/catch即可。
如果使用得当,异常并不是坏事。
发布于 2009-11-21 09:22:58
我认为在这种情况下例外是可以的。
只要确保走捷径,并排除你能做到的异常:
private static bool IsValidRegex(string pattern)
{
if (string.IsNullOrWhiteSpace(pattern)) return false;
try
{
Regex.Match("", pattern);
}
catch (ArgumentException)
{
return false;
}
return true;
}
发布于 2008-10-20 06:53:58
如果没有大量的工作就不会。正则表达式解析可能非常复杂,并且Framework中没有任何公共内容来验证表达式。
System.Text.RegularExpressions.RegexNode.ScanRegex()
看起来是负责解析表达式的主要函数,但它是内部的(无论如何都会抛出任何无效语法的异常)。因此,您将需要重新实现解析功能-这无疑会在边缘情况或框架更新时失败。
我认为在这种情况下,捕捉ArgumentException是一个很好的想法。
https://stackoverflow.com/questions/218680
复制相似问题