我正在尝试创建一个静态方法来验证输入是否实际上是一个数字,我想用正则表达式来做。当我尝试这样做时,我收到一个错误“无法将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,我无法改变它。
答案 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/
进行测试来验证您的正则表达式是否有效