如何检查是否数字
可能重复:
如何识别string是否包含数字?
在VB中有一个IsNumeric函数,有没有类似的C#?
为了解决它,我只写了代码:
if (Int32.Parse(txtMyText.Text.Trim()) > 0)
我只是想知道是否有更好的方法来做到这一点。
你可以写一个扩展方法:
public static class Extension { public static bool IsNumeric(this string s) { float output; return float.TryParse(s, out output); } }
我认为你需要一些更通用的东西。 尝试这个:
public static System.Boolean IsNumeric (System.Object Expression) { if(Expression == null || Expression is DateTime) return false; if(Expression is Int16 || Expression is Int32 || Expression is Int64 || Expression is Decimal || Expression is Single || Expression is Double || Expression is Boolean) return true; try { if(Expression is string) Double.Parse(Expression as string); else Double.Parse(Expression.ToString()); return true; } catch {} // just dismiss errors but return false return false; } }
希望能帮助到你!
你应该使用TryParse
– 如果string不是一个有效的数字, Parse
抛出exception – 例如,如果你想testing一个有效的整数:
int v; if (Int32.TryParse(textMyText.Text.Trim(), out v)) { . . . }
如果你想testing一个有效的浮点数:
double v; if (Double.TryParse(textMyText.Text.Trim(), out v)) { . . . }
还要注意, Double.TryParse
有一个重载的版本,它带有额外的参数,指定控制parsing过程的各种规则和选项 – 例如localization('。'或',') – 参见http://msdn.microsoft.com/en-us/ library / 3s27fasw.aspx 。
其他答案build议使用TryParse
,这可能适合您的需要,但提供IsNumeric
函数function的最安全的方法是引用VB库并使用IsNumeric
函数。
IsNumeric
比TryParse
更灵活。 例如, IsNumeric
对string"$100"
返回true
,而TryParse
方法则返回false
。
要在C#中使用IsNumeric
,请添加对Microsoft.VisualBasic.dll的引用。 该函数是Microsoft.VisualBasic.Information
类的一个静态方法,因此假设您已经using Microsoft.VisualBasic;
, 你可以这样做:
if (Information.IsNumeric(txtMyText.Text.Trim())) //...
有TryParse方法,它返回一个布尔值,指示转换是否成功。
您应该使用TryParse方法将数字的string表示转换为其32位有符号整数等效项。 返回值指示转换是否成功。
int intParsed; if(int.TryParse(txtMyText.Text.Trim(),out intParsed)) { // perform your code }
有一个更好的方法:
int valueParsed; if(Int32.TryParse(txtMyText.Text.Trim(), out valueParsed)) { ... }
如果您尝试parsing文本并且无法parsing,则Int32.Parse方法将引发exception。 我认为最好是使用TryParse方法捕获exception,如果遇到任何exception,让我们知道它是一个布尔值。
在parsingInt32.Parse考虑的文本时有很多复杂的问题。 重复这个努力是愚蠢的。 因此,这很可能是VB的IsNumeric所采用的方法。 您还可以通过NumberStyles枚举自定义parsing规则,以允许hex,十进制,货币和其他一些样式。
非基于Web的应用程序的另一种常见方法是将文本框的input限制为只接受可parsing为整数的字符。
编辑:您可以通过指定具体的NumberStyles来接受更多种类的input格式,例如货币值(“$ 100”)和指数(“1E4”):
int valueParsed; if(Int32.TryParse(txtMyText.Text.Trim(), NumberStyles.AllowCurrencySymbol | NumberStyles.AllowExponent, CultureInfo.CurrentCulture, out valueParsed)) { ... }
…或通过允许任何forms的支持格式:
int valueParsed; if(Int32.TryParse(txtMyText.Text.Trim(), NumberStyles.Any, CultureInfo.CurrentCulture, out valueParsed)) { ... }