65.9K
CodeProject 正在变化。 阅读更多。
Home

检查字符串值是否为数字

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.36/5 (37投票s)

2006年3月7日

CPOL

2分钟阅读

viewsIcon

430110

一种确定字符串值是否具有特定样式编号和/或文化信息的方法

引言

本文将提供一种方法来确定给定的 string 是否具有根据指定/当前文化有效的数字样式(IntegerFloatCurrency 等)。

背景

在所有 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 日:初始发布
© . All rights reserved.