使用正则表达式进行wpf文本框验证

时间:2013-04-02 22:58:39

标签: c# wpf regex

我有一个文本框,我在其中使用事件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");
     }
} 

2 个答案:

答案 0 :(得分:1)

您需要添加()以正确锚定正则表达式,否则您的示例会匹配,因为正则表达式只检查字符串开头是否有一到五位数字 - 任何事情都可能发生。

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

答案 1 :(得分:1)

它无效的原因是因为您未在()中包含正则表达式。如果没有该标识符,则无法正确锚定语法。

您希望 Expression 看起来像这样:

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

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

详细说明:

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

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

希望这有帮助,我看到 Gray 1答案盒所以其他人发布了所以你应该很容易找到一个解决方案凯文。