Copied From http://www.cnblogs.com/zm235/archive/2006/09/23/512742.html
方案一:TryCatch(执行效率不高)
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 {
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;
}