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