C#判断一个string是否为数字(正则…

来源:互联网 发布:php属于编程语言 编辑:程序博客网 时间:2024/05/22 15:35

方案一: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*$");
}

 

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=newRegex("[0-9]*[-][0-9]*[-][0-9]*");
          StringstrValidRealPattern="^([-]|[.]|[-.]|[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(inti=0;i    {
       if(ch[i]<48 || ch[i]>57)
           return false;
    }
    returntrue;
}

 

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(inti=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 longi64Value)
{
     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 doubleResult)
{
     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, outResult);
     }
     try
     {
           Result = double.Parse(Value, NumberStyles.Any, info2);
           flag1 = true;
     }
     catch (FormatException)
     {
           flag1 = double.TryParse(Value, NumberStyles.Any, info3, outResult);
     }
     catch (Exception)
     {
           flag1 = false;
     }
     return flag1;
}

 

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

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


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

0 0
原创粉丝点击