我知道一些方法来检查字符串是否只包含数字: 正则表达式,int。解析,tryparse,循环等等。

谁能告诉我最快的方法是什么?

我只需要检查值,不需要实际解析它。

通过“数字”,我是指具体的ASCII数字:0 1 2 3 4 5 6 7 8 9。

如果字符串是数字,这个问题与Identify不同,因为这个问题不仅是关于如何识别,而且是关于识别的最快方法是什么。


当前回答

你可以在一行LINQ语句中做到这一点。好吧,我知道这不一定是最快的,所以从技术上讲并没有回答这个问题,但它可能是最容易写的:

str.All(c => c >= '0' && c <= '9')

其他回答

试试下面的代码:

bool isDigitsOnly(string str)
{
   try
   {
      int number = Convert.ToInt32(str);
      return true;
   }
   catch (Exception)
   {
      return false;
   }
}

可能最快的方法是:

myString.All(c => char.IsDigit(c))

注意:如果你的字符串是空的,它将返回True,这是不正确的(如果你不认为空是有效的数字/数字)

那么char.IsDigit(myChar)呢?

这很好,还有很多其他的方法,但这个也行

bool IsDigitsOnly(string str)
    {
        if (str.Length > 0)//if contains characters
        {
            foreach (char c in str)//assign character to c
            {
                if (c < '0' || c > '9')//check if its outside digit range
                    return false;
            }
        }else//empty string
        {
            return false;//empty string 
        }

        return true;//only digits
    }

这应该可以工作:

Regex.IsMatch("124", "^[0-9]+$", RegexOptions.Compiled)

int。解析或int。TryParse并不总是有效,因为字符串可能包含int类型所能容纳的更多数字。

如果你要做这个检查不止一次,使用一个编译过的正则表达式是有用的——第一次会花费更多的时间,但之后会更快。