如何确保字符串在C#

时间:2019-05-23 20:39:32

标签: c# regex

我正在制作一个基本的计算器程序,该程序将来自用户的输入形式为“ num1 num2”。我正在努力使其仅接受输入格式。

这是C#。我已经尝试过使用所有数字的白名单数组,并同时使用string []和char []作为空格。我还尝试过正则表达式以及混合正则表达式并检查空白。他们都不是出于某种原因而工作的。

string input = "";
int numCheck = 0;
Regex whiteList = new Regex("^[1234567890]$");
do
{
  numCheck = 0;
  Console.Write("Please input the two numbers you wish to use seperated by a space: ");
  input = Console.ReadLine();
  if (input.IndexOf(" ") == -1 || input.Length <= 2 || input.Substring(input.IndexOf(" ")+1).IndexOf(" ") != -1 || (!whiteList.IsMatch(input) && !input.Any(x => Char.IsWhiteSpace(x))));
  {
    Console.WriteLine($"You entered \"{input}\" You did not enter two numbers seperated by a space, please try again.");
    numCheck = 1;
  }
} while (numCheck == 1);

我希望输入“ 1 1”通过此检查。但事实并非如此。

3 个答案:

答案 0 :(得分:2)

如果您不需要进行正则表达式,则可以执行以下操作:

var values = input.Split(' ');
int value;
if (values.Length == 2 && values.All(v => int.TryParse(v, out value)) 
{
    //do stuff
}

完整的解决方案如下所示:

string input = "";
bool success = false;
while (!success) 
{
    Console.Write("Please input the two numbers you wish to use seperated by a space: ");
    input = Console.ReadLine();

    var values = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    if (values.Length != 2 || !values.All(v => int.TryParse(v, out int value))
    {
        Console.WriteLine($"You entered \"{input}\" You did not enter two numbers separated by a space, please try again.");
    }
    else 
    {
        success = true;
    }
}

恕我直言,do..while没什么问题,但是由于您已经在使用循环变量,所以我认为仅使用while一开始就可以更好地传达您所依赖的循环的信息。对其下面过程的成功进行评估。

答案 1 :(得分:0)

正则表达式应分为三个部分:
(number) (space) (number)
所以正则表达式应该是 (\d+) (\d+)
您还可以检查匹配部分的长度是否等于输入的长度-如果不相等,则表示输入包含其他内容。

Regex.Match(String) at MSDN

答案 2 :(得分:0)

一些更改:

  • 使用string.Split是获取左/右数字的一种简便方法。然后,您可以检查2个部分。
  • 您需要在正则表达式中使用+符号,该符号必须表示1个或多个,否则,如果整数的长度超过1位,则正则表达式将测试false。

还有其他方法可以完成相同的工作,例如使用int.TryParse,但是对于您所描述的需求,这种方法很好用。


string input = "";
int numCheck = 0;
Regex whiteList = new Regex("^[1234567890]+$");
do
{
    numCheck = 0;
    Console.Write("Please input the two numbers you wish to use seperated by a space: ");
    input = Console.ReadLine();
    var numbers = input.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries);
    if (numbers.Length != 2 || !numbers.All(num => whiteList.IsMatch(num)))
    {
        Console.WriteLine("You entered " + input + " You did not enter two numbers seperated by a space, please try again.");
        numCheck = 1;
    }
}
while (numCheck == 1);

dotnetfiddle