我正在为类分配工作,它包括使用一些输入检查来确保使用正则表达式给出有效输入。为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 +)?$”。
答案 0 :(得分:4)
正则表达式考虑了小数点,即它不仅匹配整数而且匹配浮点数。这就是\\.
捕获的内容。 ^-?
也匹配可能的负号。 ^[0-9]\d*
仅匹配正整数。
语句string regex = @"^-?\\d*(\\.\\d+)?$";
创建了一个正则表达式^-?\\d*(\\.\\d+)?$
的正则表达式模式,因为字符串前面有@
。在这种情况下,您不需要使用双反斜杠,只需:
string regex = @"^-?\d*(\.\d+)?$";
答案 1 :(得分:2)
除了@manouti之外,这个正则表达式的答案还考虑了浮点数,它还考虑了负数