Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式进行wpf文本框验证_C#_Wpf_Regex - Fatal编程技术网

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

C# 使用正则表达式进行wpf文本框验证,c#,wpf,regex,C#,Wpf,Regex,我有一个文本框,在其中我使用事件TextChanged检查字符串是否对RegEx有效,如果不有效,则显示一个messagebox。当使用在线正则表达式工具(如)测试正则表达式时,它似乎工作正常。但当我运行代码时,它并没有按预期工作。我从来没有看到留言箱出现过。任何帮助都将不胜感激。我的正则表达式假设在“.”之前检查0-5之间的任何数字,如果有,则检查两个小数 private void txtValInput_TextChanged(object sender, TextChangedEventA

我有一个文本框,在其中我使用事件TextChanged检查字符串是否对RegEx有效,如果不有效,则显示一个messagebox。当使用在线正则表达式工具(如)测试正则表达式时,它似乎工作正常。但当我运行代码时,它并没有按预期工作。我从来没有看到留言箱出现过。任何帮助都将不胜感激。我的正则表达式假设在“.”之前检查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");
     }
} 
您需要添加
()
,以便正则表达式被正确地锚定,否则您的示例将匹配,因为正则表达式只检查字符串开头是否有一到五个数字-后面可能有任何数字

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

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

您希望您的表达式如下所示:

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

请记住,您可能还增加了表达式的复杂性

详细说明:

  • ^
    :将获取第一个字符或行
  • \d
    :将获取所有数字字符
  • $
    :将在行尾或最后一个字符处停止
我想就第二个问题谈一谈。如果你真的这样做了,它会抓取所有的数字字符和后面的所有字符。这可能会使你的请求稍微容易一些;但我不确定你在搜索什么


希望这能有所帮助,我看到一个灰色的1答案框,以便其他人发布,这样您就可以轻松找到解决方案Calvin。

为什么不使用局部变量输入?您正在创建它,所以您应该使用它w/IsMatch@moncadad--我已经更新了。结果还是一样。你的答案是+1。