zoukankan      html  css  js  c++  java
  • 判断一个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://www.cnblogs.com/hedonister/articles/121430.html

  • 相关阅读:
    chrome浏览器中安装以及使用Elasticsearch head 插件
    windows10 升级并安装配置 jmeter5.3
    linux下部署Elasticsearch6.8.1版本的集群
    【Rollo的Python之路】Python 爬虫系统学习 (八) logging模块的使用
    【Rollo的Python之路】Python 爬虫系统学习 (七) Scrapy初识
    【Rollo的Python之路】Python 爬虫系统学习 (六) Selenium 模拟登录
    【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium
    【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习
    【Rollo的Python之路】Python 爬虫系统学习 (三)
    【Rollo的Python之路】Python sys argv[] 函数用法笔记
  • 原文地址:https://www.cnblogs.com/dagon007/p/172808.html
Copyright © 2011-2022 走看看