【问题标题】:How to validate if the input contains a valid .Net regular expression?如何验证输入是否包含有效的 .Net 正则表达式?
【发布时间】:2012-10-26 10:03:25
【问题描述】:

我正在构建一个将命名正则表达式保存到数据库中的应用程序。看起来像这样:

我正在使用 Asp.Net 表单。如何验证输入的正则表达式?它希望用户知道输入的正则表达式是否不是有效的 .Net 正则表达式。

该字段应拒绝以下值:

^Wrong(R[g[x)]]$
Invalid\Q&\A

【问题讨论】:

  • 有趣的问题。看这个帖子是不可能的:stackoverflow.com/questions/2789407/…
  • 这很难,因为基本上任何东西都是正则表达式,只是不正确的正则表达式不会匹配任何东西。您可以提供一个测试框,用户可以在其中输入要匹配的内容,您可以针对此测试输入测试输入的正则表达式。
  • @DanFox,验证不必通过正则表达式完成,尤其是在不可能的情况下。
  • @Davio:这不是真的。 ( 之类的东西不是有效的正则表达式,因为没有匹配的右括号。它需要被转义才能有效。显然,正则表达式中还有其他“特殊”结构会导致它无效。
  • 关于正则表达式验证正则表达式主题 - 这条规则:stackoverflow.com/questions/172303/…

标签: c# asp.net regex validation


【解决方案1】:

从中创建新的 Regex 类。如果抛出异常,则无效。

try{
  new Regex(expression)
}
catch(ArgumentException ex)
{
  // invalid regex
}

// valid regex

我知道。对代码逻辑使用异常是错误的。但这似乎是唯一的解决方案。

【讨论】:

  • 不,在这种情况下使用异常是可以的。您可以将其包装在自定义 TryParse 方法中。
  • 也许有人应该写一个正则表达式来验证正则表达式... ;-)
  • @Chris 这在数学上是不可能的。
  • 开个玩笑。我很确定正则表达式语法不够规则(尽管我实际上从未见过证明,所以有兴趣看到一个)。
【解决方案2】:

可能是这样的:

public static class RegexUtils
{

    public static bool TryParse (string possibleRegex, out Regex regex)
    {
        regex = null;
        try
        {
            regex = new Regex(possibleRegex);
            return true;
        }
        catch (ArgumentException ae)
        {
           return false;
        }
    }
}

【讨论】:

  • 能否从异常中获得更多反馈?
  • 好吧,当您收到 ArgumentException 时,这意味着存在解析错误。您可以捕获 ArgumentNullException - 它派生自 Argument Exception - 专门用于检查空模式。
  • @KeesC.Bakker 异常中有消息。
猜你喜欢
  • 2014-07-03
  • 2012-01-07
  • 2012-09-19
  • 2011-01-27
  • 2011-04-18
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多