2011-02-17 135 views
5

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

TEST1 - 是字符串

1232 - 是数

试验 - 是字符串

tes3t - 是字符串

2323k - 是字符串

4567 - 是数

我该如何使用系统功能来做到这一点?

+3

什么`?1.12``.12`? ,`-32` ?.定义一个数字:) – 2011-02-17 08:46:06

+1

`return str.All(Char.IsDigit);` – Mohsen 2013-10-23 05:44:11

回答

4

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

+1

Int32.TryParse返回一个bool加一个带有解析值的out参数(如果它不起作用,则返回一个out参数)。检查布尔结果以确定它是否有效,否则“0”将被拒绝。 – 2011-02-17 08:51:38

0

如果未指定长度,则必须通过字符比较来判断字符是否为数字。

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

那么你可以尝试类似Int32.TryParse

32

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

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); 
} 

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

+0

为什么你想检查每个字符只是为了知道字符串是否有数字! – V4Vendetta 2011-02-17 08:48:52

+0

@ V4Vendette如果你看看原来的问题,他认为唯一的例子是每个*数字都是数字。那么如何确定这一点,而不必检查每个数字? – 2011-02-17 08:50:54

13

这将检查是否所有字符是数字(仅针对非负整数为真)

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

您也可以尝试正则表达式

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

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

否则,您可以使用下面的代码,以及:

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

使用int.TryParse这样。

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

您可以使用

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)); 
     } 
    } 
1

对字符串使用扩展方法相同。对于这个特定的价值“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;    
     } 
    } 
0
//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; 
    // } 

    //} 
1

这里,我们去:

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(); 
相关问题