【问题标题】:How to check whether a string in .NET is a number or not? [duplicate]如何检查.NET中的字符串是否为数字? [复制]
【发布时间】:2011-02-17 08:42:30
【问题描述】:

如何检查 .NET 中的给定字符串是否为数字?

test1 - 是字符串

1232 - 是数字

测试 - 是字符串

tes3t - 是字符串

2323k - 是字符串

4567 - 是数字

如何使用系统函数来做到这一点?

【问题讨论】:

  • 1.12?、.12?、-32?。定义一个数字:)
  • return str.All(Char.IsDigit);

标签: c# string


【解决方案1】:

您可以编写一个简单的循环来测试每个字符。

bool IsNumber(string s)
{
    foreach (char c in s)
    {
        if (!Char.IsDigit(c))
            return false;
    }
    return s.Any();
}

或者你可以使用 LINQ。

bool IsNumber(string s)
{
    return s.Any() && s.All(c => Char.IsDigit(c));
}

如果您更关心字符串是否可以表示为int类型而不是所有字符都是数字,您可以使用int.TryParse()。

bool IsNumber(string s)
{
    int i;
    return int.TryParse(s, out i);
}

注意:如果你不开始接受别人给你的一些答案,你将不会得到太多帮助。

【讨论】:

  • 为什么要检查每个字符只是为了知道字符串是否有数字!
  • @V4Vendette 如果您查看原始问题,他认为数字的唯一情况是 每个 数字都是数字。那么如何在不检查每个数字的情况下确定这一点呢?
【解决方案2】:

这将检查所有字符是否都是数字(仅适用于非负整数)

inputString.All(c => IsDigit(c));

你也可以试试正则表达式

string pattern = "^[-+]?[0-9]*\.?[0-9]*$";
Regex.IsMatch(inputString, pattern)

【讨论】:

  • 我喜欢这个。当我只需要一个布尔值时,它总是困扰着我使用输出变量。这对我来说转换为以下代码:if(productId.All(Char.IsDigit))。我喜欢优雅的Itay。
  • 如果inputString 为空,第一个示例将失败。
  • 使用inputString.All(char.IsDigit);更简单
【解决方案3】:

使用 int.TryParse(inputString, out outputInt) 如果 ontputInt 值为 0(零),则它不是数字。

【讨论】:

  • Int32.TryParse 返回一个 bool 加上一个带有解析值的 out 参数(如果它不起作用,则返回默认值)。检查布尔结果以了解它是否有效,否则“0”将被拒绝。
【解决方案4】:

您可以使用Int32.TryParse 或Int64.TryParse 尝试将字符串转换为数字。

否则,您也可以使用以下代码:

public Boolean IsNumber(String s)
{
    foreach (Char ch in s)
    {
        if (!Char.IsDigit(ch)) return false;
    }
    return true;
}

【讨论】:

    【解决方案5】:

    像这样使用int.TryParse。

    var test = "qwe";
    int result;
    if(int.TryParse(test, out result))
    {
        //if test is int you can access it here in result;
    }
    

    【讨论】:

      【解决方案6】:

      同样使用字符串的扩展方法。对于这个特定的值“123.56”响应将取决于当前的文化。

          class Program
          {
              static void Main(string[] args)
              {
                  string[] Values = {"123", "someword", "12yu", "123.56" };
                  foreach(string val in Values)
                      Console.WriteLine(string.Format("'{0}' - Is number?: {1}",val, val.IsNumber()));
              }
          }
      
      
          public static class StringExtension
          {        
              public static bool IsNumber(this String str)
              {
                  double Number;
                  if (double.TryParse(str, out Number)) return true;
                  return false;            
              }
          }
      

      【讨论】:

      • int 与双重解析总是有很好的案例。然后你必须了解独立的文化细节(我在 .NET 中没有做过很多,但在 Java 中做了很多)
      【解决方案7】:

      我们开始吧:

      public static class StringExtensions
          {
              public static bool IsDigits(this string input)
              {
                  return input.All(c => !c.IsDigit());
              }
      
              public static bool IsDigit(this char input)
              {
                  return (input < '0' || input > '9');
              }
      
          }
      

      当使用以下调用时,它应该返回 true:

      var justAString = "3131445";
      
      var result = justAString.IsDigits();
      

      【讨论】:

        【解决方案8】:

        如果未指定长度,则必须通过良好的旧字符逐字符比较来确定字符是否为数字。

        如果你希望它是一个固定位数的整数,比如一个 32 位整数,

        那么你可以试试Int32.TryParse。

        【讨论】:

          【解决方案9】:

          你可以使用

          int parsed;
          if( int.TryParse("is it a number?", out parsed) )
          

          这是针对原始问题中的字符串的一组测试。 它使用具有指定数字样式和文化能力的重载。

              [Test]
              public void FalseOnStringyString()
              {
                  var sources = new []{"test1", "test", "tes3t", "2323k"};
          
                  foreach (var source in sources)
                  {
                      int parsed;
                      Assert.IsFalse(int.TryParse(source, NumberStyles.Any, CultureInfo.InvariantCulture, out parsed));
                  }
              }
          
              [Test]
              public void TrueOnNumberyString()
              {
                  var sources = new[] { "1232", "4567" };
          
                  foreach (var source in sources)
                  {
                      int parsed;
                      Assert.IsTrue(int.TryParse(source, NumberStyles.Any, CultureInfo.InvariantCulture, out parsed));
                  }
              }
          

          另一种解决方案是使用正则表达式。 但是在这种情况下,该方法不会输出数字。

              [Test]
              public void TrueOnNumberyStringRegex()
              {
                  var sources = new[] { "1232", "4567" };
          
                  var isNumber = new Regex(@"^\d+$");
          
                  foreach (var source in sources)
                  {
                      Assert.IsTrue(isNumber.IsMatch(source));
                  }
              }
          
              [Test]
              public void FalseOnNumberyStringRegex()
              {
                  var sources = new[] { "test1", "test", "tes3t", "2323k" };
          
                  var isNumber = new Regex(@"^\d+$");
          
                  foreach (var source in sources)
                  {
                      Assert.IsFalse(isNumber.IsMatch(source));
                  }
              }
          

          【讨论】:

            【解决方案10】:
            //public static bool IsAlphaNumeric(string inputString)
                //{
                //    bool alpha = false;
                //    bool num = false;
                //    int  l;
                //    try
                //    {
                //       foreach (char s in inputString )
                //        {
                //            if (!char.IsDigit(s))
                //            {
                //                alpha = true;
            
                //            }
                //            else
                //            {
                //                num = true;
                //            }
            
            
                //        }
                //       if (num == true && alpha == true)
                //       {
                //           return true;
                //       }
                //       else
                //       {
                //           return false;
                //       }
            
                //    }
                //    catch
                //    {
                //        return false;
                //    }
            
                //}
            

            【讨论】:

              猜你喜欢
              • 2012-12-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-01-03
              • 2011-11-27
              • 2011-01-23
              • 2019-01-25
              • 1970-01-01
              相关资源
              最近更新 更多