[总结]C#判断一个string是否可以为数字,五种解决方案!

判断一个string是否可以为数字


方案一:Try...Catch(执行效率不高)

  1. /// <summary>
  2. /// 名称:IsNumberic
  3. /// 功能:判断输入的是否是数字
  4. /// 参数:string oText:源文本
  5. /// 返回值: bool true:是 false:否
  6. /// </summary>
  7. /// <param name="oText"></param>
  8. /// <returns></returns>
  9. private bool IsNumberic(string oText)
  10. {
  11. try
  12.          {
  13.             int var1=Convert.ToInt32 (oText);
  14.             return true;
  15.          }
  16. catch
  17. {
  18.     return false;
  19. }
  20. }

    

  1. using System;
  2. using System.Text.RegularExpressions;
  3. public bool IsNumber(String strNumber)
  4. {
  5. Regex objNotNumberPattern=new Regex("[^0-9.-]");
  6. Regex objTwoDotPattern=new Regex("[0-9]*[.][0-9]*[.][0-9]*");
  7. Regex objTwoMinusPattern=new Regex("[0-9]*[-][0-9]*[-][0-9]*");
  8. String strValidRealPattern="^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
  9. String strValidIntegerPattern="^([-]|[0-9])[0-9]*$";
  10. Regex objNumberPattern =new Regex("(" + strValidRealPattern +")|(" + strValidIntegerPattern + ")");
  11. return !objNotNumberPattern.IsMatch(strNumber) &
  12. !objTwoDotPattern.IsMatch(strNumber) &
  13. !objTwoMinusPattern.IsMatch(strNumber) &
  14. objNumberPattern.IsMatch(strNumber);
  15. }

or use this

  1. public static bool IsNumeric(string value)
  2. {
  3. return Regex.IsMatch(value, @"^[+-]?/d*[.]?/d*$");
  4. }
  5. public static bool IsInt(string value)
  6. {
  7. return Regex.IsMatch(value, @"^[+-]?/d*$");
  8. }
  9. public static bool IsUnsign(string value)
  10. {
  11. return Regex.IsMatch(value, @"^/d*[.]?/d*$");
  12. }

方案三:遍历

  1. public bool isnumeric(string str)
  2. {
  3.     char[] ch=new char[str.Length];
  4.     ch=str.ToCharArray();
  5.     for(int i=0;i<ch.Length;i++)
  6.     {
  7.         if(ch[i]<48 || ch[i]>57)
  8.             return false;
  9.     }
  10.     return true;
  11. }

or:

  1. public bool IsInteger(string strIn) {
  2. bool bolResult=true;
  3. if(strIn=="") {
  4. bolResult=false;
  5. }
  6. else {
  7. foreach(char Char in strIn) {
  8. if(char.IsNumber(Char))
  9. continue;
  10. else {
  11. bolResult=false;
  12. break;
  13. }
  14. }
  15. }
  16. return bolResult;
  17. }

or:


 

  1. public static bool isNumeric(string inString)
  2. {
  3. inString=inString.Trim();
  4. bool haveNumber=false;
  5. bool haveDot=false;
  6. for(int i=0;i<inString.Length;i++)
  7. {
  8. if (Char.IsNumber(inString[i]))
  9. {
  10. haveNumber=true;
  11. }
  12. else if(inString[i]=='.')
  13. {
  14. if (haveDot)
  15. {
  16. return false;
  17. }
  18. else
  19. {
  20. haveDot=true;
  21. }
  22. }
  23. else if(i==0)
  24. {
  25. if(inString[i]!='+'&&inString[i]!='-')
  26. {
  27. return false;
  28. }
  29. }
  30. else
  31. {
  32. return false;
  33. }
  34. if(i>20)
  35. {
  36. return false;
  37. }
  38. }
  39. return haveNumber;
  40. }
  41. }

 

方案四:改写vb的IsNumeric源代码(执行效率不高)

主调函数:

  1. //主调函数
  2. public static bool IsNumeric(object Expression)
  3. {
  4.       bool flag1;
  5.       IConvertible convertible1 = null;
  6.       if (Expression is IConvertible)
  7.       {
  8.             convertible1 = (IConvertible) Expression;
  9.       }
  10.       if (convertible1 == null)
  11. {
  12.             if (Expression is char[])
  13.             {
  14.                   Expression = new string((char[]) Expression);
  15.             }
  16.             else
  17.             {
  18.                   return false;
  19.             }
  20.       }
  21.       TypeCode code1 = convertible1.GetTypeCode();
  22.       if ((code1 != TypeCode.String) && (code1 != TypeCode.Char))
  23.       {
  24.             return Utils.IsNumericTypeCode(code1);
  25.       }
  26.       string text1 = convertible1.ToString(null);
  27.       try
  28.       {
  29.             long num2;
  30.             if (!StringType.IsHexOrOctValue(text1, ref num2))
  31.             {
  32.                   double num1;
  33.                   return DoubleType.TryParse(text1, ref num1);
  34.             }
  35.             flag1 = true;
  36.       }
  37.       catch (Exception)
  38.       {
  39.             flag1 = false;
  40.       }
  41.       return flag1;
  42. }
  43. //子函数
  44. // return Utils.IsNumericTypeCode(code1);
  45. internal static bool IsNumericTypeCode(TypeCode TypCode)
  46. {
  47.       switch (TypCode)
  48.       {
  49.             case TypeCode.Boolean:
  50.             case TypeCode.Byte:
  51.             case TypeCode.Int16:
  52.             case TypeCode.Int32:
  53.             case TypeCode.Int64:
  54.             case TypeCode.Single:
  55.             case TypeCode.Double:
  56.             case TypeCode.Decimal:
  57.  {
  58.                   return true;
  59.             }
  60.             case TypeCode.Char:
  61.             case TypeCode.SByte:
  62.             case TypeCode.UInt16:
  63.             case TypeCode.UInt32:
  64.             case TypeCode.UInt64:
  65.             {
  66.                   break;
  67.             }
  68.       }
  69.       return false;
  70. }
  71. //-----------------
  72. //StringType.IsHexOrOctValue(text1, ref num2))
  73. internal static bool IsHexOrOctValue(string Value, ref long i64Value)
  74. {
  75.       int num1;
  76.       int num2 = Value.Length;
  77.       while (num1 < num2)
  78.       {
  79.             char ch1 = Value[num1];
  80.             if (ch1 == '&')
  81.             {
  82.                   ch1 = char.ToLower(Value[num1 + 1], CultureInfo.InvariantCulture);
  83.                   string text1 = StringType.ToHalfwidthNumbers(Value.Substring(num1 + 2));
  84.                   if (ch1 == 'h')
  85.                   {
  86.                         i64Value = Convert.ToInt64(text1, 0x10);
  87.                   }
  88.                   else if (ch1 == 'o')
  89.                   {
  90.                         i64Value = Convert.ToInt64(text1, 8);
  91.                   }
  92.                   else
  93. {
  94.                         throw new FormatException();
  95.                   }
  96.                   return true;
  97.             }
  98.             if ((ch1 != ' ') && (ch1 != '/u3000'))
  99.             {
  100.                   return false;
  101.             }
  102.             num1++;
  103.       }
  104.       return false;
  105. }
  106. //----------------------------------------------------
  107. // DoubleType.TryParse(text1, ref num1);
  108. internal static bool TryParse(string Value, ref double Result)
  109. {
  110.       bool flag1;
  111.       CultureInfo info1 = Utils.GetCultureInfo();
  112.       NumberFormatInfo info3 = info1.NumberFormat;
  113.       NumberFormatInfo info2 = DecimalType.GetNormalizedNumberFormat(info3);
  114.       Value = StringType.ToHalfwidthNumbers(Value, info1);
  115.       if (info3 == info2)
  116.       {
  117.             return double.TryParse(Value, NumberStyles.Any, info2, out Result);
  118.       }
  119.       try
  120.       {
  121.             Result = double.Parse(Value, NumberStyles.Any, info2);
  122.             flag1 = true;
  123.       }
  124.       catch (FormatException)
  125.       {
  126.             flag1 = double.TryParse(Value, NumberStyles.Any, info3, out Result);
  127.       }
  128.       catch (Exception)
  129.       {
  130.             flag1 = false;
  131.       }
  132.       return flag1;
  133. }

 

方案五: 直接引用vb运行库(执行效率不高)

方法: 首先需要添加Visualbasic.runtime的引用
 代码中Using Microsoft.visualbasic;
 程序中用Information.isnumeric("ddddd");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值