1

我有一个文本框,我在其中使用事件 TextChanged 来检查字符串是否对 RegEx 有效,如果不是则显示一个消息框。在使用http://regexpal.com/等在线正则表达式工具测试我的正则表达式时,它似乎工作正常。但是当我运行我的代码时,它没有按预期工作。我从来没有看到消息框出现。任何帮助,将不胜感激。我的正则表达式应该在“。”之前检查 0-5 之间的任何数字。如果有的话,带两位小数。

private void txtValInput_TextChanged(object sender, TextChangedEventArgs e)
{
     string input = (sender as TextBox).Text; //1234567

     if(!Regex.IsMatch(input, @"^\d{1,5}|\d{0,5}\.\d{1,2}$"))
     {
           MessageBox.Show("Error!, check and try again");
     }
} 
4

2 回答 2

2

您需要添加,()以便正则表达式正确锚定,否则您的示例匹配,因为正则表达式仅检查字符串开头是否有一到五个数字 - 后面可能会出现任何问题。

@"^(\d{1,5}|\d{0,5}\.\d{1,2})$"
于 2013-04-02T23:05:19.917 回答
1

它不起作用的原因是因为您没有将正则表达式包含在(). 如果没有该标识符,它就无法正确锚定您的语法。

你会希望你的表达式看起来像这样:

@"^(\d{1,5}|\d{0,5}\.\d{1,2})$

请记住,您可能还为您的Expression添加了额外的复杂性。

详细说明:

  • ^: 将抓取第一个字符或行。
  • \d:将抓取所有数字字符。
  • $: 将在行尾或最后一个字符处停止。

我想花点时间看第二个。如果您确实这样做\d+,它将获取所有数字字符以及之后的所有字符。这可能会使您的请求稍微容易一些;但我不确定你在搜索什么。

希望这会有所帮助,我看到了一个灰色 1 答案框,因此其他人发布了因此您应该很容易找到解决方案 Calvin。

于 2013-04-02T23:15:31.683 回答