这个正则表达式试图做什么?

时间:2015-02-04 19:48:41

标签: c# regex

我正在为类分配工作,它包括使用一些输入检查来确保使用正则表达式给出有效输入。为IsValidNumber检查提供的示例是string regex = @"^-?\\d*(\\.\\d+)?$";

我不确定这是否真的在检查有效数字,因为我以前从未见过。不会像string regex = @"^[0-9]\d*$这样的工作或我错过了什么吗?注意我确实需要能够通过一个浮点而不仅仅是一个int。

更新: 使用我提供的正则表达式,我运行程序只是遇到错误检查的问题,即使有效也不允许任何事情通过

这是调用IsNumberValid

的方法
private static string GetNumericInput(string c)
    {
        do
        {
            Console.Write(c);
            string var = Console.ReadLine();
            if (!String.IsNullOrEmpty(var) && IsValidNumber(var))
            {
                return var;
            }
            else
            {
                Console.WriteLine("Input was either Null/Empty, or contained non-numeric characters.");
                Console.WriteLine("Retry input.");
                Console.WriteLine();
            }
        }
        while (true);
    }

这里是IsValidNumber

public static bool IsValidNumber(string value)
        {
            string regex = @"^-?\\d*(\\.\\d+)?$";

            return Regex.IsMatch(value, regex);
        }

我不完全确定如何读取错误的断点但是当我在string regex = @"^-?\\d*(\\.\\d+)?$";return Regex.IsMatch(value, regex);放置断点时,它显示正则表达式的值为 null “^ - ?\\ d *(\\。\\ d +)?$”

2 个答案:

答案 0 :(得分:4)

正则表达式考虑了小数点,即它不仅匹配整数而且匹配浮点数。这就是\\.捕获的内容。 ^-?也匹配可能的负号。 ^[0-9]\d*仅匹配正整数。

语句string regex = @"^-?\\d*(\\.\\d+)?$";创建了一个正则表达式^-?\\d*(\\.\\d+)?$的正则表达式模式,因为字符串前面有@。在这种情况下,您不需要使用双反斜杠,只需:

string regex = @"^-?\d*(\.\d+)?$";

答案 1 :(得分:2)

除了@manouti之外,这个正则表达式的答案还考虑了浮点数,它还考虑了负数