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