检查字符串值是否为数字






4.36/5 (37投票s)
一种确定字符串值是否具有特定样式编号和/或文化信息的方法
引言
本文将提供一种方法来确定给定的 string
是否具有根据指定/当前文化有效的数字样式(Integer
、Float
、Currency
等)。
背景
在所有 VBScript 和 Visual Basic 应用程序中,都有一个内置函数称为 IsNumeric
/ IsCurrency
,但在 C# 中没有具有相同功能的内置函数。
我进行了一些调查,发现所有给定的解决方案总是使用 try catch
来确定给定的 string
值是否可以被解析。
这似乎是一种很好的测试方法,但是如果数字包含逗号或货币符号怎么办?
那么我必须向此代码添加另一个检查,并去除非数字符号,然后测试结果。
在这里,我提供了一种 C# 支持的简单方法。
解决方案
在下面的代码中,我实际上使用了 C# 的内置功能来确定给定的 string
值是否符合我想要的要求。
public bool isNumeric(string val, System.Globalization.NumberStyles NumberStyle)
{
Double result;
return Double.TryParse(val,NumberStyle,
System.Globalization.CultureInfo.CurrentCulture,out result);
}
上述函数允许我测试给定的 string
是否符合以下样式之一或多个
- 十六进制数字
- 数字
- 货币
- Float
关于 System.Globalization.NumberStyles
的更详细列表和说明可以在 这里 找到。
示例
如果要测试整数,请执行以下操作
isNumeric("42000", System.Globalization.NumberStyles.Integer)
如果要测试用逗号分隔的整数,请执行以下操作
isNumeric("42,000", System.Globalization.NumberStyles.Integer |
System.Globalization.NumberStyles.AllowThousands)
使用其他文化信息
我使用当前文化信息,如以下代码所示。
可以从 这里 获取所有可用文化名称的列表。
public bool isNumeric
(string val, System.Globalization.NumberStyles NumberStyle, string CultureName)
{
Double result;
return Double.TryParse(val,NumberStyle,new System.Globalization.CultureInfo
(CultureName),out result);
}
有很多方法可以解决这个问题,我选择了一种适合初学者水平的方法,并且不涉及任何 正则表达式,这需要更高的专业知识。
如果您对涉及正则表达式的解决方案感兴趣,请查看以下链接
享受并告诉我您的发现。
历史
- 2006 年 3 月 7 日:初始发布