C#判断一个string是否为数字

来源:互联网 发布:cpu一键超频软件 编辑:程序博客网 时间:2024/05/18 00:12
案一:Try...Catch(执行效率不高)private bool IsNumberic(string oText){          try         {                  int var1=Convert.ToInt32 (oText);                  return true;         }          catch         {                  return false;         }} 方案二:正则表达式(推荐)a)public static bool IsNumeric(string value){         return Regex.IsMatch(value, @"^[+-]?\d*[.]?\d*$");}public static bool IsInt(string value){         return Regex.IsMatch(value, @"^[+-]?\d*$");}public static bool IsUnsign(string value){         return Regex.IsMatch(value, @"^\d*[.]?\d*$");} public static bool isTel(string strInput){        return Regex.IsMatch(strInput, @"\d{3}-\d{8}|\d{4}-\d{7}");}b)using System;using System.Text.RegularExpressions;public bool IsNumber(String strNumber){           Regex objNotNumberPattern=new Regex("[^0-9.-]");           Regex objTwoDotPattern=new Regex("[0-9]*[.][0-9]*[.][0-9]*");           Regex objTwoMinusPattern=new Regex("[0-9]*[-][0-9]*[-][0-9]*");           String strValidRealPattern="^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";           String strValidIntegerPattern="^([-]|[0-9])[0-9]*$";           Regex objNumberPattern =new Regex("(" + strValidRealPattern +")|(" + strValidIntegerPattern + ")");           return !objNotNumberPattern.IsMatch(strNumber) &&                  !objTwoDotPattern.IsMatch(strNumber) &&                  !objTwoMinusPattern.IsMatch(strNumber) &&                  objNumberPattern.IsMatch(strNumber);} 方案三:遍历a)public bool isnumeric(string str){    char[] ch=new char[str.Length];    ch=str.ToCharArray();    for(int i=0;i    {        if(ch[i]<48 || ch[i]>57)            return false;    }    return true;} b)public bool IsInteger(string strIn) {        bool bolResult=true;        if(strIn=="") {               bolResult=false;        }        else {              foreach(char Char in strIn) {                         if(char.IsNumber(Char))                                continue;                         else {                                 bolResult=false;                                 break;                         }              }        }        return bolResult;}c)public static bool isNumeric(string inString){        inString=inString.Trim();        bool haveNumber=false;        bool haveDot=false;        for(int i=0;i        {               if (Char.IsNumber(inString[i]))                {                        haveNumber=true;                }                else if(inString[i]=='.')                {                        if (haveDot)                        {                                return false;                         }                         else                         {                                haveDot=true;                          }                }                else if(i==0)                {                          if(inString[i]!='+'&&inString[i]!='-')                          {                                  return false;                          }                }                else                {                          return false;                 }                if(i>20)                {                          return false;                 }         }         return haveNumber;       }  方案四:改写vb的IsNumeric源代码(执行效率不高)//主调函数public static bool IsNumeric(object Expression){      bool flag1;      IConvertible convertible1 = null;      if (Expression is IConvertible)      {            convertible1 = (IConvertible) Expression;      }      if (convertible1 == null)      {            if (Expression is char[])            {                  Expression = new string((char[]) Expression);            }            else            {                  return false;            }      }      TypeCode code1 = convertible1.GetTypeCode();      if ((code1 != TypeCode.String) && (code1 != TypeCode.Char))      {            return Utils.IsNumericTypeCode(code1);      }      string text1 = convertible1.ToString(null);      try      {            long num2;            if (!StringType.IsHexOrOctValue(text1, ref num2))            {                  double num1;                  return DoubleType.TryParse(text1, ref num1);            }            flag1 = true;      }      catch (Exception)      {            flag1 = false;      }      return flag1;}//子函数// return Utils.IsNumericTypeCode(code1);internal static bool IsNumericTypeCode(TypeCode TypCode){      switch (TypCode)      {            case TypeCode.Boolean:            case TypeCode.Byte:            case TypeCode.Int16:            case TypeCode.Int32:            case TypeCode.Int64:            case TypeCode.Single:            case TypeCode.Double:            case TypeCode.Decimal:            {                  return true;            }            case TypeCode.Char:            case TypeCode.SByte:            case TypeCode.UInt16:            case TypeCode.UInt32:            case TypeCode.UInt64:            {                  break;            }      }      return false;} //-----------------//StringType.IsHexOrOctValue(text1, ref num2))internal static bool IsHexOrOctValue(string Value, ref long i64Value){      int num1;      int num2 = Value.Length;      while (num1 < num2)      {            char ch1 = Value[num1];            if (ch1 == '&')            {                  ch1 = char.ToLower(Value[num1 + 1], CultureInfo.InvariantCulture);                  string text1 = StringType.ToHalfwidthNumbers(Value.Substring(num1 + 2));                  if (ch1 == 'h')                  {                        i64Value = Convert.ToInt64(text1, 0x10);                  }                  else if (ch1 == 'o')                  {                        i64Value = Convert.ToInt64(text1, 8);                  }                  else                  {                        throw new FormatException();                  }                  return true;            }            if ((ch1 != ' ') && (ch1 != '\u3000'))            {                  return false;            }            num1++;      }      return false;}//----------------------------------------------------// DoubleType.TryParse(text1, ref num1);internal static bool TryParse(string Value, ref double Result){      bool flag1;      CultureInfo info1 = Utils.GetCultureInfo();      NumberFormatInfo info3 = info1.NumberFormat;      NumberFormatInfo info2 = DecimalType.GetNormalizedNumberFormat(info3);      Value = StringType.ToHalfwidthNumbers(Value, info1);      if (info3 == info2)      {            return double.TryParse(Value, NumberStyles.Any, info2, out Result);      }      try      {            Result = double.Parse(Value, NumberStyles.Any, info2);            flag1 = true;      }      catch (FormatException)      {            flag1 = double.TryParse(Value, NumberStyles.Any, info3, out Result);      }      catch (Exception)      {            flag1 = false;      }      return flag1;}  


原创粉丝点击