C#正整数的正则表达式

时间:2017-05-21 04:10:14

标签: c#

我正在尝试创建一个静态方法来验证输入是否实际上是一个数字,我想用正则表达式来做。当我尝试这样做时,我收到一个错误“无法将int转换为字符串”,但我的理解是整数也可以使用正则表达式进行比较。

到目前为止,这是我的静态方法。

1

这是我要验证的输入,这是在Main方法中。

public static void validatenumber(int number)
    {
        Regex regex = new Regex("^[0-9]+$");

        if (regex.IsMatch(number))
        {
            Console.WriteLine("The input is a number");
        }
        else
        {
            Console.WriteLine("The input is not a number");
        }
    }

我的Main方法需要中的变量 Console.WriteLine("Please enter a number"); int number= Convert.ToInt32(Console.ReadLine()); validatenumber(number); 是一个int,我无法改变它。

2 个答案:

答案 0 :(得分:3)

您的问题不是您遇到的Regex错误,而是您尝试将int验证为数字。在此验证中没有任何意义,因为编译器永远不会允许int变量保存除数字之外的其他内容。

如果yot方法接收string作为参数,那将是有意义的:

validatenumber(string number)

在这种情况下,您不会收到此错误,因为Regex适用于字符串。

答案 1 :(得分:3)

此处可以找到您的代码问题,这会导致您的正则表达式(因为您必须在string而不是int上执行正则表达式。)

Console.WriteLine("Please enter a number");
int number= Convert.ToInt32(Console.ReadLine()); // <--- Here!
validatenumber(number);
  

Console.ReadLine()将返回一个字符串。因此,当您尝试对其进行Convert.ToInt32()时,您的代码会抛出错误或给您一个意外的结果。

您需要将代码更改为如下所示:

static void Main(string[] args)
{
    ...

    Console.WriteLine("Please enter a number");
    string numberString = Console.ReadLine();
    int number = ConvertAndValidateNumber(number); // we are now going to return an int

    ...
}

然后使用validatenumber方法更改int方法以返回int.TryParse()类型,这更容易阅读。

public static int ConvertAndValidateNumber(string numberString)
{
    int.TryParse(numberString, out int number);
    return number; 
}

如果您真的想使用RegEx(在某些特殊情况下有意义),那么您可以将上述方法更改为:

public static int ConvertAndValidateNumberUsingRegEx(string numberString)
{
    int number;

    // 
    // put your RegEx here...
    //

    // and don't forget to assign the converted string value into the number
    number = (your converted string);

    // return it
    return number; 
}

您也可以通过在此http://regexr.com/

进行测试来验证您的正则表达式是否有效