我想检查一个长度未定义的字符串是否只包含数字。例如:
"234324" = true
"er32" = false
"1" = true
我试图解决这个问题的方式是这样的:
public bool Validate(string input)
{
return (Regex.IsMatch(input, @"^\d+$")) ? true : false;
}
现在我不是一个有正则表达式的大英雄,但根据我在互联网上找到的所有内容,表达式"^\+$"
或"^[0-9]$"
都可行,但它不会:(
答案 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));
}