当前位置:  开发笔记 > 编程语言 > 正文

我可以在不抛出异常的情况下测试正则表达式在C#中是否有效

如何解决《我可以在不抛出异常的情况下测试正则表达式在C#中是否有效》经验,为你挑选了2个好方法。

我允许用户输入正则表达式以匹配IP地址,以便在相关系统中进行IP过滤.我想验证输入的正则表达式是否有效,因为很多用户会弄乱op,尽管有良好的意图.

我当然可以在try/catch中做一个Regex.IsMatch(),看看它是否会爆炸,但有没有更智能的方法呢?速度不是一个问题,我只是宁愿避免无缘无故抛出异常.



1> Jeff Atwood..:

我认为在这种情况下例外是可以的.

这是我放在一起的东西:

private static bool IsValidRegex(string pattern)
{
    if (string.IsNullOrEmpty(pattern)) return false;

    try
    {
        Regex.Match("", pattern);
    }
    catch (ArgumentException)
    {
        return false;
    }

    return true;
}


只是`new Regex(pattern)`怎么样?

2> Robert..:

只要您捕获非常具体的异常,就可以执行try/catch.

如果使用正确,例外不是邪恶的.


不幸的是,性能影响(特定于场景,我知道),以及异常类型非常普遍时调试的中断(ArgumentException对此很糟糕).我希望有一天能看到`Regex.TryParse()`引入.NET :)
推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有