我有一个文本框,我在其中使用事件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");
}
}
答案 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答案盒所以其他人发布了所以你应该很容易找到一个解决方案凯文。