仅检查数字和一个可选小数点的字符串。

时间:2010-01-19 09:37:59

标签: c# numeric

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

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

是否有像IsNumeric这样的函数?

9 个答案:

答案 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);