7

我需要检查一个字符串是否只包含数字。我怎么能在 C# 中实现这一点?

string s = "123"    → valid 
string s = "123.67" → valid 
string s = "123F"   → invalid 

有没有像 IsNumeric 这样的函数?

4

9 回答 9

9
double n;
if (Double.TryParse("128337.812738", out n)) {
  // ok
}

假设数字不会溢出双倍则有效

对于一个巨大的字符串,试试正则表达式:

if (Regex.Match(str, @"^[0-9]+(\.[0-9]+)?$")) {
  // ok
}

如果需要,添加科学记数法 (e/E) 或 +/- 符号...

于 2010-01-19T09:40:25.350 回答
3

您可以使用double.TryParse

string value;
double number;

if (Double.TryParse(value, out number))
   Console.WriteLine("valid");
else
   Console.WriteLine("invalid");
于 2010-01-19T09:41:13.710 回答
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;
}
于 2010-01-19T09:41:26.720 回答
2

无论字符串有多长,这都应该有效:

string s = "12345";
bool iAllNumbers = s.ToCharArray ().All (ch => Char.IsDigit (ch) || ch == '.');
于 2010-01-19T09:46:33.103 回答
2

使用正则表达式是最简单的方法(但不是最快的):

bool isNumeric = Regex.IsMatch(s,@"^(\+|-)?\d+(\.\d+)?$");
于 2010-01-19T09:46:58.140 回答
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

输出:

错误的

真的

于 2010-01-19T09:54:22.540 回答
0

我认为您可以在 Regex 类中使用正则表达式

正则表达式.IsMatch( yourStr, "\d" )

或类似的东西离开我的头顶。

或者您可以使用 Parse 方法 int.Parse( ... )

于 2010-01-19T09:40:51.227 回答
0

如果您将字符串作为参数接收,则更灵活的方法是使用其他帖子中描述的正则表达式。如果你从用户那里得到输入,你可以挂上 KeyDown 事件并忽略所有不是数字的键。这样你就可以确定你只有数字。

于 2010-01-19T09:50:10.537 回答
-1

这应该有效:

bool isNum = Integer.TryParse(Str, out Num);
于 2010-01-19T09:41:11.527 回答