仅检查VB.NET字符串中的数字

仅检查VB.NET字符串中的数字,vb.net,Vb.net,在将字符串附加到StringBuilder之前,我想对字符串进行检查,以确保字符串中只包含数字字符。一个简单的方法是什么?使用Integer.TryParse()如果字符串中只有数字,它将返回true。Int32最大值为2147483647,因此,如果您的值小于该值,则罚款。 您还可以使用Double.TryParse(),它的最大值为1.7976931348623157E+308,但允许使用小数点 如果您希望得到的值不是整数,您可以每次遍历一个字符串 string test = "11120

在将字符串附加到StringBuilder之前,我想对字符串进行检查,以确保字符串中只包含数字字符。一个简单的方法是什么?

使用Integer.TryParse()如果字符串中只有数字,它将返回true。Int32最大值为2147483647,因此,如果您的值小于该值,则罚款。

您还可以使用Double.TryParse(),它的最大值为1.7976931348623157E+308,但允许使用小数点

如果您希望得到的值不是整数,您可以每次遍历一个字符串

string test = "1112003212g1232";
        int result;
        bool append=true;
        for (int i = 0; i < test.Length-1; i++)
        {
            if(!Int32.TryParse(test.Substring(i,i+1),out result))
            {
                //Not an integer
                append = false;
            }
        }
string test=“1112003212g1232”;
int结果;
bool-append=true;
对于(int i=0;i

如果append保持为true,则字符串为整数。这可能是一种更灵活的方法,但这应该是可行的。

模式匹配!请参阅,(about.com)和(VB.NET dev article)。

您可以使用正则表达式或Integer.TryParse,我更喜欢正则表达式检查使用正则表达式:

Dim reg as New RegEx("^\d$")

If reg.IsMatch(myStringToTest) Then
  ' Numeric
Else
  ' Not
End If
更新:

如果在VB.NET2008/2010中使用linq,也可以使用linq完成相同的任务

Dim isNumeric as Boolean = False

Dim stringQuery = From c In myStringToTest 
                          Where Char.IsDigit(c) 
                          Select c

If stringQuery.Count <> myStringToTest.Length Then isNumeric = False
Dim isNumeric为布尔值=False
Dim stringQuery=来自myStringToTest中的c
其中Char.IsDigit(c)
选择c
如果stringQuery.Count myStringToTest.Length,则isNumeric=False

假设您看到的是相对较短的字符串,其数字永远不会大于Max Int32值,请使用Gage的解决方案。如果是可变长度的,有时可能会溢出,请使用Regex(
System.Text.RegularExpressions

只检查数字的正则表达式相当常规:
^[0-9]+$


检查正则表达式的非常好的解释。

如果您不想使用正则表达式,使用
char.IsNumber对每个字符进行简单检查即可

您可以将其与
All
扩展方法结合使用(在C#中,我不知道如何在VB.net中编写):


查看其他
char
方法,如
IsDigit

2个其他紧凑型解决方案:

没有LINQ:

Dim foo As String = "10004"
Array.Exists(foo.ToCharArray, Function(c As Char) Not Char.IsNumber(c))
使用LINQ(另一个答案中的VB.Net版本与C#版本相当):


在VB.Net中编写代码以检查字符串是否仅包含数值

If IsNumeric("your_text") Then
  MessageBox.Show("yes")
Else
  MessageBox.Show("no")
End If

还没有提到负值,
Integer.TryParse
将接受负值

我更喜欢
UInteger.TryParse
,它将拒绝负数。但是,如果值以“+”开头,则需要进行额外检查:


ULong.TryParse
表示更大的数字。

只要字符串不大于最大Int32。如果字符串太长导致整数溢出,则这不起作用。我只想确保字符串只包含数字字符,如果不包含,我需要在字符串中找到非数字字符所在的位置,并查看值是什么。是的,我意识到这是C#,同样的基本思想,如果一个字符串表示一个低于零的数字,这将失败:例如,-1这将被解析为一个数字,但实际上要检查的是字符串是否仅为数字。对于有限精度和字符串长度的假设,至少检查它是否为负。定义数字字符?你只考虑0到9,还是六进制小数?
0x87
有效吗?是的,只有0-9我需要跟踪正则表达式,这是IMHO中更优雅的解决方案。我们使用RE进行大多数输入验证和数据清理。不幸的是,VB不允许您编写如此优雅的东西。您将得到
value.All(函数(c)Char.IsNumber(c))
foo.All(Function(c As Char) Char.IsNumber(c))
If IsNumeric("your_text") Then
  MessageBox.Show("yes")
Else
  MessageBox.Show("no")
End If
Dim test As String = "1444"
Dim outTest As UInteger
If Not test.StartsWith("+") AndAlso UInteger.TryParse(test, outTest) Then
    MessageBox.Show("It's just digits!")
End If