如何添加一个接受小数位(5.23)的正则表达式,但这样的中断没有其他内容?即只处理数字和小数位,如果键入或返回除此之外的任何内容,则会引发错误:
case 1:
double[] myArrai1 = new double[3];
Console.WriteLine("Insert a number");
myArrai1[0] = double.TryParse(Console.ReadLine()); // no overload method?
Console.WriteLine("Insert a number");
myArrai1[1] = double.Parse(Console.ReadLine());
Console.WriteLine("Insert a number");
myArrai1[2] = double.Parse(Console.ReadLine());
break;
干杯队员。
P.s不确定如何使用break进行编程也必须毫无例外。
答案 0 :(得分:7)
正则表达式对于验证double
有点重。改为使用double.TryParse
(如果输入无效,则返回false)。
double dbl;
if (!double.TryParse(Console.ReadLine(), out dbl))
Console.WriteLine("Invalid input");
答案 1 :(得分:3)
答案 2 :(得分:2)
试试这个:
/^\d+(\.\d{1,2})?$/;
Regex regex = new Regex ("^\d+(\.\d{1,2})?$");
MatchCollection matches = regex.Matches(text);
if (matches.Count>0)......
答案 3 :(得分:2)
使用.NET的双重解析而不是尝试在Regex中重新创建它可能会更好。您可以使用Double.TryParse测试字符串并在可以解析数字时进行转换:
Console.WriteLine("Insert a number");
string input = Console.ReadLine();
double value;
if (!Double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out value))
throw new InvalidOperationException(String.Format("{0} could not be parsed as a valid number.", input));
答案 4 :(得分:1)
您是否只想验证用户输入的内容,或者首先阻止他们输入无效字符?
在第一种情况下,并不真正需要正则表达式。你在double.Parse的正确轨道上,但你想要做的是double.TryParse。首先将用户输入读入一个字符串,然后将TryParse转换为double。如果TryParse返回false,告诉用户他们的输入无效并提示他们再次输入。
FWIW:我是这样做的(警告:未经测试的代码),这可能是您需要的,也可能不是:
case 1:
double[] myArrai1 = new double[3];
for (int i=0; i < myArrai1.length; i++) {
Console.WriteLine("Insert a number");
while (!double.TryParse(Console.Readline(), out myArrai1[i])) {
Console.WriteLine("Invalid entry. Please enter a number.");
}
}
break;