首页 > 解决方案 > 为什么我的正则表达式会得到意外结果?

问题描述

我目前正在测试一个项目的输入验证,并且我正在使用正则表达式。

我试图在尝试解析之前查看 TextBox 的内容是否是十进制数。

为此,我使用表达式\d+([\.\,]{1}\d+)?

我希望它检查是否有一个或多个数字,然后是零或一个点或逗号和一个或多个数字的组合。

有效的输入是:

123

12.3

1,23

无效的输入将是:

12.

.123

1...2

1.2.3.3

在使用不同的、已知的错误输入对其进行测试后,该表达式似乎不像我预期的那样工作。我错过了什么吗?

我正在使用的代码是:

private bool validateFloatNumber(string Text, TextBox Box)
        {
            Regex regex = new Regex("\\d+([\\.\\,]{1}\\d+)?");
            bool result = regex.IsMatch(Text);
            if (!result)
            {
                if (Text.Length == 0)
                {
                    Box.Background = Brushes.Gray;
                }
                else
                {
                    Box.Background = Brushes.Red;
                }
            }
            else
            {
                Box.Background = Brushes.Transparent;
            }
            return result;
        }

我用输入测试了它,1...1写入的值resultstrue

这是调试的图像和结果中给出的错误值

提前致谢!

标签: c#regexwpf

解决方案


绝不是RegEx专家,但也许:

^(\d|\d+[.,]?\d+)$

这将测试:

  • \d- 一个数字
  • \d+- 一个或多个数字,带有[.,]?零或一个点或逗号,后跟\d+至少一个数字。

在线测试


推荐阅读