【问题标题】:Regex fails to work when invalid characters are entered after valid characters?在有效字符后输入无效字符时,正则表达式无法工作?
【发布时间】:2016-01-31 03:23:26
【问题描述】:

我有一个采用这个正则表达式的 Windows 窗体应用程序:

public bool priceRegex (string parameter)
{
    Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9][0-9]?)?");
    Match matchPrice = regexPrice.Match(parameter);
    return matchPrice.Success;
}

并在这里使用它:

if (name.priceRegex(PriceEntryBox.Text) == false)
{
    MessageBox.Show("Invalid characters entered in Price Box", "Error");
}

后面跟着一个else,后面跟着其他代码。

这可行,并且当我输入“fdsf”或“dasds123”时会显示消息框,但是当输入“12fsdf”时它会引发异常,而不是显示消息框。有什么帮助吗?

【问题讨论】:

  • 有什么异常?
  • 它不会抛出该输入(或任何其他输入(除了 null)) - 什么是您的有效输入?
  • 你有没有在调试模式下进入它?您的正则表达式不会引发异常。
  • 如果可能,也更喜欢静态实现; return Regex.Match(parameter, @"^[0-9]+(\.[0-9][0-9]?)?").Success;
  • 当出现故障时你应该return

标签: c# regex winforms datagridview


【解决方案1】:

您的旧正则表达式只是检查输入的值是否以有效的东西开头(事实证明,任何以数字开头的东西对您的正则表达式都是有效的)。如果要确保整个内容与正则表达式匹配,则必须以 ^ 开头并以 $ 结尾,而不仅仅是以 ^ 开头。

Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9][0-9]?)?$");

它也等价于以下内容:

Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9]{1,2})?$");

【讨论】:

    【解决方案2】:

    Match 方法在指定的输入字符串中搜索 Regex 中指定的正则表达式的第一次出现。所以 '12fsdf' 在提供的输入中匹配 12 并且您的方法返回成功值。因此,不要使用Match,而应使用Regex 的IsMatch 方法,该方法指示指定的正则表达式是否在指定的输入字符串中找到匹配项。

    public bool priceRegex (string parameter)
    {
        Regex regexPrice = new Regex(@"^[0-9]+(\.[0-9][0-9]?)?");
        return regexPrice.IsMatch(parameter);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 2021-03-23
      • 2011-09-27
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多