首页 > 学院 > 开发设计 > 正文

C#判断一个string是否可以为数字的几种解决方案

2019-11-17 04:27:10
字体:
来源:转载
供稿:网友

方案一:Try...Catch(执行效率不高)view plaincopy to clipboardPRint?
/// <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;  
}  

/// <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)view plaincopy to clipboardprint?
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);  

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)view plaincopy to clipboardprint?
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*$");  

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*$");
}方案三:遍历 www.devdao.com
a)view plaincopy to clipboardprint?
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;  

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)view plaincopy to clipboardprint?
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;  

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)view plaincopy to clipboardprint?
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;  
}  

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源代码(执行效率不高)view plaincopy to clipboardprint?
//主调函数  
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;  

//主调函数
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");


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表