IsNumeric function in c#
我知道可以使用try/catch语句检查文本框或变量的值是否为数字,但
我知道有一种方法可以通过添加对Visual Basic的引用来启用Visual C中的Visual Basic
1 2 3 4 | public bool IsNumeric(string value) { return value.All(char.IsNumber); } |
要完全窃取比尔的答案,你可以做一个扩展方法,并使用一些句法糖来帮助你。
创建一个类文件,stringextensions.cs
内容:
1 2 3 4 5 6 7 8 | public static class StringExt { public static bool IsNumeric(this string text) { double test; return double.TryParse(text, out test); } } |
编辑:这是为了更新C 7语法。在线声明参数。
1 2 3 4 5 6 7 | public static class StringExt { public static bool IsNumeric(this string text) { return double.TryParse(text, out double test); } } |
像这样的调用方法:
1 2 | var text ="I am not a number"; text.IsNumeric() //<--- returns false |
您可以创建一个助手方法。类似:
1 2 3 4 | public bool IsNumeric(string input) { int test; return int.TryParse(input, out test); } |
http://msdn.microsoft.com/en-us/library/wkze6zky.aspx
菜单:项目——>添加引用
单击:程序集,框架
在Microsoft.VisualBasic上打勾。
打好了。
该链接用于Visual Studio 2013,您可以对不同版本的Visual Studio使用"其他版本"下拉列表。
在所有情况下,都需要添加对.NET程序集"microsoft.VisualBasic"的引用。
在您的C文件顶部,您需要:
1 | using Microsoft.VisualBasic; |
然后您可以看到编写代码。
代码如下:
1 2 3 4 5 6 7 | private void btnOK_Click(object sender, EventArgs e) { if ( Information.IsNumeric(startingbudget) ) { MessageBox.Show("This is a number."); } } |
使用C_7(.NET Framework 4.6.2),可以将isNumeric函数编写为一行程序:
1 | public bool IsNumeric(string val) => int.TryParse(val, out int result); |
注意,上面的函数只适用于整数(int32)。但您可以为其他数字数据类型实现相应的函数,如long、double等。
尝试遵循代码段。
1 2 3 4 5 6 7 8 | double myVal = 0; String myVar ="Not Numeric Type"; if (Double.TryParse(myVar , out myNum)) { // it is a number } else { // it is not a number } |
值得一提的是,可以根据Unicode类别(数字、大写、小写、货币等)检查字符串中的字符。下面是两个使用LINQ检查字符串中数字的示例:
1 2 | var containsNumbers = s.Any(Char.IsNumber); var isNumber = s.All(Char.IsNumber); |
为了清楚起见,上面的语法是以下内容的较短版本:
1 2 | var containsNumbers = s.Any(c=>Char.IsNumber(c)); var isNumber = s.All(c=>Char.IsNumber(c)); |
链接到msdn上的unicode类别:
unicodecategory枚举
我通常用扩展方法处理类似的事情。以下是在控制台应用程序中实现的一种方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | namespace ConsoleApplication10 { class Program { static void Main(string[] args) { CheckIfNumeric("A"); CheckIfNumeric("22"); CheckIfNumeric("Potato"); CheckIfNumeric("Q"); CheckIfNumeric("A&^*^"); Console.ReadLine(); } private static void CheckIfNumeric(string input) { if (input.IsNumeric()) { Console.WriteLine(input +" is numeric."); } else { Console.WriteLine(input +" is NOT numeric."); } } } public static class StringExtensions { public static bool IsNumeric(this string input) { return Regex.IsMatch(input, @"^\d+$"); } } } |
输出:
a不是数字。
22是数字。
土豆不是数字。
q不是数字。
&;^*^不是数字。
注意,这里有一些使用regex检查数字的其他方法。
数字可以通过多种方式实现,但我用我的方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public bool IsNumeric(string value) { bool isNumeric = true; char[] digits ="0123456789".ToCharArray(); char[] letters = value.ToCharArray(); for (int k = 0; k < letters.Length; k++) { for (int i = 0; i < digits.Length; i++) { if (letters[k] != digits[i]) { isNumeric = false; break; } } } return isNumeric; } |