zoukankan
html css js c++ java
C#中如何判斷一個String是否為數字
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;
}
方案五: 直接引用vb运行库(执行效率不高)
方法: 首先需要添加Visualbasic.runtime的引用
代码中Using Microsoft.visualbasic;
程序中用Information.isnumeric(
"
ddddd
"
);
查看全文
相关阅读:
(转)静态方法与实例方法
使用C#和Excel进行报表开发(8)
js千分位
各种语言多态性比较
中国互联网100个Web2.0网站名单
HDU4405 期望
HDU1266 字符串逆转
POJ1087 DInic
POJ1003 水~
HDU4403 DFS
原文地址:https://www.cnblogs.com/dimg/p/707338.html
最新文章
自定义控件(分页)
角色权限模块
自定义控件(输入框,数字)
Java学习12.8
Java学习12.10
linux 命令大全
CCTV5 现场 直播 NBA 火箭 亚洲杯 世界杯
linux 命令大全(3)
博客 上 三天内天气预报的 模块
linux 命令大全(2)
热门文章
linux 命令大全(2)
博客 上 三天内天气预报的 模块
linux 命令大全(3)
(转)ASP.NET 页面间数据传递方法
WebServiceHelper类
使用C#和Excel进行报表开发(7)
文章标题注释
DataGridView数据导出到Excel
窗体上有一个TreeView和若干个TextBox控件,我希望当点击treeview中的某个节点时能让指定的TextBox得到焦点。
DataGridViewComboBoxColumn 使用
Copyright © 2011-2022 走看看