c#正则表达式只有字符串中的数字字符

时间:2011-12-16 13:02:16

标签: c# regex textbox numerical

我想检查一个长度未定义的字符串是否只包含数字。例如:

"234324" = true
"er32" = false
"1" = true

我试图解决这个问题的方式是这样的:

public bool Validate(string input)
{
    return (Regex.IsMatch(input, @"^\d+$")) ? true : false;
}

现在我不是一个有正则表达式的大英雄,但根据我在互联网上找到的所有内容,表达式"^\+$""^[0-9]$"都可行,但它不会:(

5 个答案:

答案 0 :(得分:9)

此处不需要RegEx,您可以使用int.TryParse检查string是否为有效整数。

public bool Validate(string input)
{
     int myNumber;
     return int.TryParse(input, out myNumber);
}

请注意,IsMatch已经返回bool? true : false无用。

答案 1 :(得分:3)

int number;
return int.TryParse(input, out number);

答案 2 :(得分:3)

使用"^[0-9]+$"代替"^[0-9]$"(注意+字符),这意味着将评估多个字符。

答案 3 :(得分:2)

^\d+$应该有效并且对我有用。最后你的两个例子不起作用,因为^\+$缺少d(我认为这是一个拼写错误,但它应该是^\d+$)而第二个例子需要一个加号后结束方括号(即^[0-9]+$)。

我会检查修剪输入是否有所不同,你可能有空格导致问题。否则,您的错误是在其他地方,而不是在此代码中。

答案 4 :(得分:2)

如果字符串确实可以是任意长度,那么Ray正确地说如果字符串表示的数字是>则接受的答案中的代码将失败。 Int32.MaxValue。

以下示例将返回false而不是true:

bool isNumber = Validate(Int64.MaxValue.ToString()); // isNumber == false

以下是适用于任意长度字符串的替代解决方案:

public bool Validate(string input)
{
   return input.ToCharArray().All(c => Char.IsDigit(c));    
}
相关问题