码迷,mamicode.com
首页 > 其他好文 > 详细

是否是数字

时间:2019-03-23 19:48:51      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:on()   trim   width   ber   erp   pat   eric   new   code   

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

 

案一: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; }

是否是数字

标签:on()   trim   width   ber   erp   pat   eric   new   code   

原文地址:https://www.cnblogs.com/qiu18359243869/p/10585251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!