如何检查一个字符串是否为数字?

31
我想知道在C#中如何检查一个字符串是否为数字(且只为数字)。
示例:
141241   Yes
232a23   No
12412a   No
有特定的函数吗?

1
取决于你所说的“数字”是什么意思。一个只包含数字的字符串?一个可接受的可解析的int/long/float/double?还是其他什么? - dlev
前导零怎么办?例如,“0123”是整数还是不是? - Nika G.
2
1.2е’Ң1,2йғҪеҗҲжі•иҝҳжҳҜдёҚеҗҲжі•пјҹ1e3е‘ўпјҹ-2е‘ўпјҹ88888888888888888888888888888888888888888888888888888888888888888888е‘ўпјҹ - Lasse V. Karlsen
可能是重复的问题:如何检查.NET中的字符串是否为数字?。还有一个问题是如何确定一个字符串是否为数字? - nawfal
3
可能是 如何确定一个字符串是否为数字? 的重复问题。 - AdrianHHH
显示剩余2条评论
25个回答

66

如果你需要处理像 1, -2, 和 3.14159 这样的数字,请查看 double.TryParse()。有些人建议使用 int.TryParse(),但是这个方法在处理小数时会失败。

string candidate = "3.14159";
if (double.TryParse(candidate, out var parsedNumber))
{
    // parsedNumber is a valid number!
}

编辑:正如Lukasz在下面指出的那样,当解析带有十进制分隔符的数字时,我们应该注意线程文化。即,为了安全起见,请执行以下操作:

double.TryParse(candidate, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var parsedNumber)


1
请在解析字符串时始终使用InvariantCulture。 - Lukasz Madon
很有趣,这是为了处理逗号表示小数点吗? - James McCormack
请问如何修复一个在小数分隔符上出现问题的应用程序? - Lukasz Madon
好的,我测量了一下以确定最佳模式,以下是结果:test="1234" textAll(char.IsDigit) --> 00:00:00.0001493. Int32.TryParse(..) --> 00:00:00.0000012. 我们最好使用 TryParse 模式。 - Jacob
1
现在可以进行内联变量声明,因此使用以下代码即可实现更短的操作,无需单独声明“num”: if (double.TryParse(candidate, out var num)) - Peter

59

如果您只想检查字符串是否全部为数字(而不是位于特定数字范围内),可以使用以下方式:

string test = "123";
bool allDigits = test.All(char.IsDigit);

3
太棒了。我不明白为什么这个评价不更高。 - eth0
1
正是我所需要的。谢谢。 - NoonKnight
3
请注意,如果空字符串不可接受,则此解决方案将无法处理 "".All(Char.IsDigit)(它将返回 true)。您需要改为使用 test.Any() && test.All(Char.IsDigit) - Pluto
2
使用 System.Linq; - alansiqueira27
好的,我进行了测量以找到最佳模式,这里是结果:test="1234" textAll(char.IsDigit) --> 00:00:00.0001493. Int32.TryParse(..) --> 00:00:00.0000012。我们最好使用TryParse模式。 - Jacob

10

有的

int temp;
int.TryParse("141241", out temp) = true
int.TryParse("232a23", out temp) = false
int.TryParse("12412a", out temp) = false

希望这能帮到你。


9
使用Int32.TryParse()
int num;

bool isNum = Int32.TryParse("[string to test]", out num);

if (isNum)
{
    //Is a Number
}
else
{
    //Not a number
}

MSDN 参考文档


6

是的 - 你可以在C#中使用Visual Basic的方法。这都属于.NET;VB函数IsNumeric、IsDate等实际上是Information类的静态方法。所以以下是你的代码:

using Microsoft.VisualBasic;
...
Information.IsNumeric( object );

4
兄弟,我刚刚提供了使用 VisualBasic 命名空间中某个东西的 C# 代码。请仔细阅读帖子和代码! - Joshua Honig
IsNumeric 本质上是 double.TryParse 的包装器。 - James McCormack
1
有趣。然而,IsNumeric函数会稍微宽松一些。这可能是发帖人正在寻找的,也可能不是,但值得注意的是,例如,对于带有货币符号(如“$ 5,423.231”)的字符串,IsNumeric函数将返回true,但double.TryParse函数将返回false。 - Joshua Honig

6

使用int.TryParse()

string input = "141241";
int ouput;
bool result = int.TryParse(input, out output);

如果结果是 true,则它会被返回。


5
int value;
if (int.TryParse("your string", out value))
{
    Console.WriteLine(value);
}

5

这是我个人最喜欢的内容

private static bool IsItOnlyNumbers(string searchString)
{
return !String.IsNullOrEmpty(searchString) && searchString.All(char.IsDigit);
}

4

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接