2017-05-21 34 views
-1

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

这是我迄今为止的静态方法。

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 main方法的变量number,我不能改变的。

+5

检查'int'是一个数字是什么意思?当然这是一个数字,否则你会得到一个运行时异常。 –

+0

@KobyDouek我打算检查用户没有输入字母或其他符号而不是数字。 – Gonzalo

+0

你有一个问题'int number = Convert.ToInt32(Console.ReadLine());'检查我的回答如下。 – Svek

回答

3

你的问题不是你正在得到的Regex错误,而是你试图验证一个int作为一个数字的事实。在这个验证中没有意义,因为编译器绝不允许int变量保存除数字外的其他内容。

它将使意义,如果仁爱堂方法接收string作为参数:

validatenumber(string number)

在这种情况下,你不会得到这个错误,因为Regex适用于字符串。

+0

所以我不应该使用正则表达式来验证它呢?只能在字符串中使用它? – Gonzalo

+2

是的,先生。 '正则表达式'仅用于验证字符串。不需要将int变量验证为数字,它们必须是数字。 –

+1

它看起来像你的输入将来自于一个文本框,如果是这样的话,它会出现一个字符串。验证这一点,并在必要时解析它。 @hendrix – Arvayne

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.TryParse()方法,这是很容易阅读int类型。

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

如果你真的想使用正则表达式(这是有道理的在一些非常特殊的情况下),那么你可以改变上面的方法:

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/

+0

这里我的问题是,当用户输入字母时,我得到一个异常,这是我想要控制但没有成功。 – Gonzalo

+0

@hendrix我更新了我的答案,以便更加简洁地回答您的问题。 – Svek