我需要检查一个字符串是否只包含数字。我怎么能在C#中实现这个目标?
string s = "123" → valid
string s = "123.67" → valid
string s = "123F" → invalid
是否有像IsNumeric这样的函数?
答案 0 :(得分:10)
double n;
if (Double.TryParse("128337.812738", out n)) {
// ok
}
假设数字不会溢出双重
对于一个巨大的字符串,请尝试使用regexp:
if (Regex.Match(str, @"^[0-9]+(\.[0-9]+)?$")) {
// ok
}
在需要时添加科学记数法(e / E)或+/-符号......
答案 1 :(得分:3)
您可以使用double.TryParse
string value;
double number;
if (Double.TryParse(value, out number))
Console.WriteLine("valid");
else
Console.WriteLine("invalid");
答案 2 :(得分:3)
取自MSDN(如何使用Visual C#实现Visual Basic .NET IsNumeric功能):
// IsNumeric Function
static bool IsNumeric(object Expression)
{
// Variable to collect the Return value of the TryParse method.
bool isNum;
// Define variable to collect out parameter of the TryParse method. If the conversion fails, the out parameter is zero.
double retNum;
// The TryParse method converts a string in a specified style and culture-specific format to its double-precision floating point number equivalent.
// The TryParse method does not generate an exception if the conversion fails. If the conversion passes, True is returned. If it does not, False is returned.
isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );
return isNum;
}
答案 3 :(得分:2)
无论字符串有多长,这都应该有效:
string s = "12345";
bool iAllNumbers = s.ToCharArray ().All (ch => Char.IsDigit (ch) || ch == '.');
答案 4 :(得分:2)
使用正则表达式是最简单的方法(但不是最快):
bool isNumeric = Regex.IsMatch(s,@"^(\+|-)?\d+(\.\d+)?$");
答案 5 :(得分:1)
如上所述,您可以使用double.tryParse
如果您不喜欢(出于某种原因),您可以编写自己的扩展方法:
public static class ExtensionMethods
{
public static bool isNumeric (this string str)
{
for (int i = 0; i < str.Length; i++ )
{
if ((str[i] == '.') || (str[i] == ',')) continue; //Decide what is valid, decimal point or decimal coma
if ((str[i] < '0') || (str[i] > '9')) return false;
}
return true;
}
}
用法:
string mystring = "123456abcd123";
if (mystring.isNumeric()) MessageBox.Show("The input string is a number.");
else MessageBox.Show("The input string is not a number.");
输入:
123456abcd123
123.6
输出:
假
真
答案 6 :(得分:0)
我认为您可以在Regex类中使用正则表达式
Regex.IsMatch(yourStr,“\ d”)
或者类似的东西。
或者您可以使用Parse方法int.Parse(...)
答案 7 :(得分:0)
如果您将字符串作为参数接收,则使用正则表达式将更灵活,如其他帖子中所述。 如果您从用户那里获得输入,您可以挂钩KeyDown事件并忽略所有非数字的键。这样你就可以确定你只有数字。
答案 8 :(得分:-1)
这应该有效:
bool isNum = Integer.TryParse(Str, out Num);