正则表达式C#控制台应用程序

时间:2012-03-07 20:30:39

标签: c# regex error-handling

如何添加一个接受小数位(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进行编程也必须毫无例外。

5 个答案:

答案 0 :(得分:7)

正则表达式对于验证double有点重。改为使用double.TryParse(如果输入无效,则返回false)。

double dbl;
if (!double.TryParse(Console.ReadLine(), out dbl))
    Console.WriteLine("Invalid input");

答案 1 :(得分:3)

您不需要Regex

您只需使用decimal.Parsedouble.Parse - 如果输入字符串格式错误,您将获得FormatException

您发布的代码似乎是对的 - 什么不起作用?

答案 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;