1 案一:Try...Catch(执行效率不高) 2 private bool IsNumberic(string oText) 3 { 4 try 5 { 6 int var1=Convert.ToInt32 (oText); 7 return true; 8 } 9 catch 10 { 11 return false; 12 } 13 } 14 15 方案二:正则表达式(推荐) 16 a) 17 public static bool IsNumeric(string value) 18 { 19 return Regex.IsMatch(value, @"^[+-]?d*[.]?d*$"); 20 } 21 public static bool IsInt(string value) 22 { 23 return Regex.IsMatch(value, @"^[+-]?d*$"); 24 } 25 public static bool IsUnsign(string value) 26 { 27 return Regex.IsMatch(value, @"^d*[.]?d*$"); 28 } 29 public static bool isTel(string strInput) 30 { 31 return Regex.IsMatch(strInput, @"d{3}-d{8}|d{4}-d{7}"); 32 } 33 b) 34 using System; 35 using System.Text.RegularExpressions; 36 public bool IsNumber(String strNumber) 37 { 38 Regex objNotNumberPattern=new Regex("[^0-9.-]"); 39 Regex objTwoDotPattern=new Regex("[0-9]*[.][0-9]*[.][0-9]*"); 40 Regex objTwoMinusPattern=new Regex("[0-9]*[-][0-9]*[-][0-9]*"); 41 String strValidRealPattern="^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$"; 42 String strValidIntegerPattern="^([-]|[0-9])[0-9]*$"; 43 Regex objNumberPattern =new Regex("(" + strValidRealPattern +")|(" + strValidIntegerPattern + ")"); 44 return !objNotNumberPattern.IsMatch(strNumber) && 45 !objTwoDotPattern.IsMatch(strNumber) && 46 !objTwoMinusPattern.IsMatch(strNumber) && 47 objNumberPattern.IsMatch(strNumber); 48 } 49 50 51 方案三:遍历 52 a) 53 public bool isnumeric(string str) 54 { 55 char[] ch=new char[str.Length]; 56 ch=str.ToCharArray(); 57 for(int i=0;i { 58 if(ch[i]<48 || ch[i]>57) 59 return false; 60 } 61 return true; 62 } 63 64 b) 65 public bool IsInteger(string strIn) { 66 bool bolResult=true; 67 if(strIn=="") { 68 bolResult=false; 69 } 70 else { 71 foreach(char Char in strIn) { 72 if(char.IsNumber(Char)) 73 continue; 74 else { 75 bolResult=false; 76 break; 77 } 78 } 79 } 80 return bolResult; 81 } 82 c) 83 84 public static bool isNumeric(string inString) 85 { 86 inString=inString.Trim(); 87 bool haveNumber=false; 88 bool haveDot=false; 89 for(int i=0;i { 90 if (Char.IsNumber(inString[i])) 91 { 92 haveNumber=true; 93 } 94 else if(inString[i]=='.') 95 { 96 if (haveDot) 97 { 98 return false; 99 } 100 else 101 { 102 haveDot=true; 103 } 104 } 105 else if(i==0) 106 { 107 if(inString[i]!='+'&&inString[i]!='-') 108 { 109 return false; 110 } 111 } 112 else 113 { 114 return false; 115 } 116 if(i>20) 117 { 118 return false; 119 } 120 } 121 return haveNumber; 122 } 123 124 125 方案四:改写vb的IsNumeric源代码(执行效率不高) 126 //主调函数 127 public static bool IsNumeric(object Expression) 128 { 129 bool flag1; 130 IConvertible convertible1 = null; 131 if (Expression is IConvertible) 132 { 133 convertible1 = (IConvertible) Expression; 134 } 135 if (convertible1 == null) 136 { 137 if (Expression is char[]) 138 { 139 Expression = new string((char[]) Expression); 140 } 141 else 142 { 143 return false; 144 } 145 } 146 TypeCode code1 = convertible1.GetTypeCode(); 147 if ((code1 != TypeCode.String) && (code1 != TypeCode.Char)) 148 { 149 return Utils.IsNumericTypeCode(code1); 150 } 151 string text1 = convertible1.ToString(null); 152 try 153 { 154 long num2; 155 if (!StringType.IsHexOrOctValue(text1, ref num2)) 156 { 157 double num1; 158 return DoubleType.TryParse(text1, ref num1); 159 } 160 flag1 = true; 161 } 162 catch (Exception) 163 { 164 flag1 = false; 165 } 166 return flag1; 167 }//子函数 168 // return Utils.IsNumericTypeCode(code1); 169 internal static bool IsNumericTypeCode(TypeCode TypCode) 170 { 171 switch (TypCode) 172 { 173 case TypeCode.Boolean: 174 case TypeCode.Byte: 175 case TypeCode.Int16: 176 case TypeCode.Int32: 177 case TypeCode.Int64: 178 case TypeCode.Single: 179 case TypeCode.Double: 180 case TypeCode.Decimal: 181 { 182 return true; 183 } 184 case TypeCode.Char: 185 case TypeCode.SByte: 186 case TypeCode.UInt16: 187 case TypeCode.UInt32: 188 case TypeCode.UInt64: 189 { 190 break; 191 } 192 } 193 return false; 194 } 195 196 //----------------- 197 //StringType.IsHexOrOctValue(text1, ref num2)) 198 internal static bool IsHexOrOctValue(string Value, ref long i64Value) 199 { 200 int num1; 201 int num2 = Value.Length; 202 while (num1 < num2) 203 { 204 char ch1 = Value[num1]; 205 if (ch1 == '&') 206 { 207 ch1 = char.ToLower(Value[num1 + 1], CultureInfo.InvariantCulture); 208 string text1 = StringType.ToHalfwidthNumbers(Value.Substring(num1 + 2)); 209 if (ch1 == 'h') 210 { 211 i64Value = Convert.ToInt64(text1, 0x10); 212 } 213 else if (ch1 == 'o') 214 { 215 i64Value = Convert.ToInt64(text1, 8); 216 } 217 else 218 { 219 throw new FormatException(); 220 } 221 return true; 222 } 223 if ((ch1 != ' ') && (ch1 != 'u3000')) 224 { 225 return false; 226 } 227 num1++; 228 } 229 return false; 230 } 231 //---------------------------------------------------- 232 // DoubleType.TryParse(text1, ref num1); 233 internal static bool TryParse(string Value, ref double Result) 234 { 235 bool flag1; 236 CultureInfo info1 = Utils.GetCultureInfo(); 237 NumberFormatInfo info3 = info1.NumberFormat; 238 NumberFormatInfo info2 = DecimalType.GetNormalizedNumberFormat(info3); 239 Value = StringType.ToHalfwidthNumbers(Value, info1); 240 if (info3 == info2) 241 { 242 return double.TryParse(Value, NumberStyles.Any, info2, out Result); 243 } 244 try 245 { 246 Result = double.Parse(Value, NumberStyles.Any, info2); 247 flag1 = true; 248 } 249 catch (FormatException) 250 { 251 flag1 = double.TryParse(Value, NumberStyles.Any, info3, out Result); 252 } 253 catch (Exception) 254 { 255 flag1 = false; 256 } 257 return flag1; 258 }