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

时间:2011-07-18 13:29:27

标签: c#

我想知道C#如何检查字符串是否是一个数字(只是一个数字)。

示例:

141241   Yes
232a23   No
12412a   No

依旧......

是否有特定的功能?

25 个答案:

答案 0 :(得分:60)

如果您正在谈论double.TryParse()1-2等数字,请查看3.14159。其他一些人建议int.TryParse(),但小数点会失败。

double num;
string candidate = "1";
if (double.TryParse(candidate, out num))
{
    // It's a number!
}

编辑:正如Lukas在下面指出的那样,在使用小数分隔符解析数字时,我们应该注意线程文化,即这样做是安全的:

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

答案 1 :(得分:56)

如果您只想检查,如果字符串是全部数字(不在特定的数字范围内),您可以使用:

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

答案 2 :(得分:10)

是的,有

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

希望这有帮助。

答案 3 :(得分:9)

使用Int32.TryParse()

int num;

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

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

MSDN Reference

答案 4 :(得分:6)

使用int.TryParse()

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

结果将为true

答案 5 :(得分:6)

是的 - 您可以在C#中使用Visual Basic 。这是所有的.NET; VB函数IsNumeric,IsDate等实际上是Information class的静态方法。所以这是你的代码:

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

答案 6 :(得分:5)

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

答案 7 :(得分:4)

也许您正在寻找int.TryParse功能。

http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx

答案 8 :(得分:4)

这是我个人最喜欢的

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

答案 9 :(得分:3)

许多数据类型都有一个TryParse方法,如果它成功转换为该特定类型,则会返回true,并将解析后的值作为out-parameter。

在你的情况下,这些可能是有意义的:

http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx

http://msdn.microsoft.com/en-us/library/system.decimal.tryparse.aspx

答案 10 :(得分:1)

你应该对int

使用TryParse方法
string text1 = "x";
    int num1;
    bool res = int.TryParse(text1, out num1);
    if (res == false)
    {
        // String is not a number.
    }

答案 11 :(得分:1)

string str = "123";
int i = Int.Parse(str);

如果str是一个有效的整数字符串,那么它将转换为整数并存储在其他情况下发生异常。

答案 12 :(得分:1)

如果要验证每个字符是否为数字,并且还返回错误消息验证中不是数字的字符,则可以遍历每个字符。

string num = "123x";

foreach (char c in num.ToArray())
{
    if (!Char.IsDigit(c))
    {
        Console.WriteLine("character " + c + " is not a number");
        return;
    }
}

答案 13 :(得分:1)

int.TryPasrse()Methode是最好的方法 因此,如果值是字符串,您将永远不会有异常,而不是TryParse Methode返回给您bool值,因此您将知道解析操作是成功还是失败

string yourText = "2";
int num;
bool res = int.TryParse(yourText, out num);
if (res == true)
{
    // the operation succeeded and you got the number in num parameter
}
else
{
   // the operation failed
}

答案 14 :(得分:1)

int result = 0;
bool isValidInt = int.TryParse("1234", out result);
//isValidInt should be true
//result is the integer 1234

当然,您可以查看其他数字类型,例如decimaldouble

答案 15 :(得分:1)

  

C#7.0 开始,您可以 在参数中声明out变量   方法调用列表,而不是单独的变量   宣言。这样会产生更紧凑,更易读的代码,并且   防止您无意中为变量分配值   在方法调用之前。

bool isDouble = double.TryParse(yourString, out double result);

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier

答案 16 :(得分:0)

您可以使用类似以下代码的内容:

    string numbers = "numbers you want to check";

    Regex regex = new Regex("^[0-9]+$"));

    if (regex.IsMatch(numbers))
    {
        //string value is a number
    }

答案 17 :(得分:0)

public static void Main()
        {
            string id = "141241";
            string id1 = "232a23";
            string id2 = "12412a";

            validation( id,  id1,  id2);
        }

       public static void validation(params object[] list)
        {
            string s = "";
            int result;
            string _Msg = "";

            for (int i = 0; i < list.Length; i++)
            {
                s = (list[i].ToString());

               if (string.IsNullOrEmpty(s))
               {
                   _Msg = "Please Enter the value"; 
               }

               if (int.TryParse(s, out result))
               {
                   _Msg = "Enter  " + s.ToString() + ", value is Integer";

               }
               else
               {
                   _Msg = "This is not Integer value ";
               }
            }
        }

答案 18 :(得分:0)

试试这个

这里我执行no和串联的添加

 private void button1_Click(object sender, EventArgs e)
        {
            bool chk,chk1;
            int chkq;
            chk = int.TryParse(textBox1.Text, out chkq);
            chk1 = int.TryParse(textBox2.Text, out chkq);
            if (chk1 && chk)
            {
                double a = Convert.ToDouble(textBox1.Text);
                double b = Convert.ToDouble(textBox2.Text);
                double c = a + b;
                textBox3.Text = Convert.ToString(c);
            }
            else
            {
                string f, d,s;
                f = textBox1.Text;
                d = textBox2.Text;
                s = f + d;
                textBox3.Text = s;
            }
        }

答案 19 :(得分:0)

我不是一个技能特别高的程序员,但是当我需要解决这个问题时,我选择了一个非常不优雅的解决方案,但它符合我的需求。

    private bool IsValidNumber(string _checkString, string _checkType)
    {
        float _checkF;
        int _checkI;
        bool _result = false;

        switch (_checkType)
        {
            case "int":
                _result = int.TryParse(_checkString, out _checkI);
                break;
            case "float":
                _result = Single.TryParse(_checkString, out _checkF);
                break;
        }
        return _result;

    }

我只是用以下内容来称呼它:

if (IsValidNumber("1.2", "float")) etc...

这意味着我可以在If ...然后比较期间得到一个简单的真/假答案,这对我来说是重要的因素。如果我需要检查其他类型,那么我根据需要添加一个变量和一个case语句。

答案 20 :(得分:0)

使用此

 double num;
    string candidate = "1";
    if (double.TryParse(candidate, out num))
    {
        // It's a number!


 }

答案 21 :(得分:0)

int num;
bool isNumeric = int.TryParse("123", out num);

答案 22 :(得分:0)

namespace Exception
{
    class Program
    {
        static void Main(string[] args)
        {
            bool isNumeric;
            int n;
            do
            {
                Console.Write("Enter a number:");
                isNumeric = int.TryParse(Console.ReadLine(), out n);
            } while (isNumeric == false);
            Console.WriteLine("Thanks for entering number" + n);
            Console.Read();
        }
    }
}

答案 23 :(得分:0)

Regex.IsMatch(stringToBeChecked, @"^\d+$")

Regex.IsMatch("141241", @"^\d+$")  // True

Regex.IsMatch("232a23", @"^\d+$")  // False

Regex.IsMatch("12412a", @"^\d+$")  // False

答案 24 :(得分:0)

一些建议的解决方案的问题是他们没有考虑各种浮点数格式。以下功能可以实现:

public bool IsNumber(String value)
{
    double d;
    if (string.IsNullOrWhiteSpace(value)) 
        return false; 
    else        
        return double.TryParse(value.Trim(), System.Globalization.NumberStyles.Any,
                            System.Globalization.CultureInfo.InvariantCulture, out d);
}

它假定允许使用各种浮点数样式,如小数点(英语)和十进制逗号(德语)。如果不是这种情况,请更改数字样式参数。请注意,Any 包含hex mumbers,因为double类型不支持它。