zoukankan      html  css  js  c++  java
  • 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;
    }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/foart/archive/2008/07/28/2726271.aspx

  • 相关阅读:
    【Web技术】561- 网站性能优化之度量篇
    【拓展】什么是Deno?跟Node.js有何区别?
    【Web技术】560- 一个简洁、有趣的无限下拉方案
    【Web技术】559- 一文带你彻底搞懂跨域
    【TS】558- 5000 多字,让你一文掌握 TS 枚举
    【拓展】你真的会写 Markdown 么?
    【调试】557- 11 个Chrome骚技巧让你为所欲为
    ios 地图
    ios 7 20像素解决
    保存图片到相册
  • 原文地址:https://www.cnblogs.com/lf6112/p/1709402.html
Copyright © 2011-2022 走看看