zoukankan      html  css  js  c++  java
  • C#判断一个string是否可以为数字

    方案一:Try...Catch(执行效率不高)
        /// <summary>
        /// 名称:IsNumberic
        /// 功能:判断输入的是否是数字
        /// 参数:string oText:源文本
        /// 返回值: bool true:是 false:否
        /// </summary>
        /// <param name="oText"></param>
        /// <returns></returns>
        private bool IsNumberic(string oText)
        {
            try
            {
                int var1 = Convert.ToInt32(oText);
                return true;
            }
            catch
            {
                return false;
            }
        }

    方案二:正则表达式(推荐)
    a)

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

    b)

        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*$");
        }

    方案三:遍历
    a)
        public bool isnumeric(string str)
        {
            char[] ch=new char[str.Length];
            ch=str.ToCharArray();
            for(int i=0;i<ch.Length;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 < inString.Length; 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;
    }

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

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

    出处:http://blog.csdn.net/fredlau/archive/2007/12/24/1964989.aspx

    System.Text.RegularExpressions.Regex reg1 
           = new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.]?\d*$");  
       return reg1.IsMatch(str); 

  • 相关阅读:
    uni-app picker通用方法 多个picker公用一个bindPickerChange方法 通用的@change事件
    ElementUI Cascader 级联选择器 hover触发不好用以及图标不显示问题
    jquery 最简单的重置DIV内容,重置表单内容方法
    bootstrap table 表头与内容不对齐问题解决
    hbuilder mui html vue ul li 自定义循环赋值ID
    vue文件中提示Expected Boolean, got String
    hbuilder连接模拟器进行联调(逍遥模拟器,MuMu模拟器,夜神模拟器)
    网易mumu无法启动,只在任务栏有个图标
    pytest——pycharm中右击运行(run)没有问题,在terminal中运行pytest报错:E ModuleNotFoundError: No module named
    eclipse的TestNG运行不了——eclipse刚安装完TestNG,首次建立测试用例,但是一直运行出错的问题。
  • 原文地址:https://www.cnblogs.com/emanlee/p/1552388.html
Copyright © 2011-2022 走看看