2011-12-16 101 views
1

我想检查一个长度未定义的字符串是否只包含数字。例如:c#正则表达式字符串中只有数字字符

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

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

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

现在即时通讯不是一个大英雄正则表达式,但根据所有我能找到在互联网上无论是表达"^\+$""^[0-9]$"会的工作,但它不:(

+3

你的输入是否包含某种换行符?这和'$`不匹配就是你编码的唯一原因是_not_不适用于我的眼睛。 – fge 2011-12-16 13:05:29

+0

你是否得到误报或漏报?也宠物peeve,但`条件? true:false`等价于`condition` – Ray 2011-12-16 13:17:10

回答

9

没有必要为RegEx在这里,你可以使用int.TryParse来检查string是一个有效的整数。

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

注意IsMatch已经返回bool? true : false是没用的。

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

^\d+$应该可以工作,并为我工作。最后你的两个例子将不起作用,因为^\+$缺少d(我认为这是一个错字,但应该是^\d+$),第二个例子在结束方括号(即^[0-9]+$)后需要一个加号。

我会检查是否修剪输入有所不同,你可能有空白导致问题。否则,你的错误是在别的地方,而不是在这个代码。

2

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

下面的例子将返回false,而不是真实的:

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

下面是一个替代的解决方案,对于任意长度的字符串的工作原理:

public bool Validate(string input) 
{ 
    return input.ToCharArray().All(c => Char.IsDigit(c));  
} 
3

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

相关问题