我想在将它附加到StringBuilder之前对String进行检查,以确保字符串中只有数字字符。有什么简单的方法可以做到这一点?
答案 0 :(得分:8)
使用Integer.TryParse()如果字符串中只有数字,它将返回true。 Int32最大值是2,147,483,647,所以如果你的价值低于那么你的罚款。 http://msdn.microsoft.com/en-us/library/f02979c7.aspx
您也可以使用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;
}
}
如果append保持为true,则字符串为整数。可能是一种更灵活的方式,但这应该有用。
答案 1 :(得分:8)
在VB.Net中编码以检查字符串是否仅包含数值。
If IsNumeric("your_text") Then
MessageBox.Show("yes")
Else
MessageBox.Show("no")
End If
答案 2 :(得分:4)
使用正则表达式:
Dim reg as New RegEx("^\d$")
If reg.IsMatch(myStringToTest) Then
' Numeric
Else
' Not
End If
更新:
如果您在VB.Net 2008/2010中这样做,也可以使用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
答案 3 :(得分:3)
如果您不想使用RegEx,只需使用char.IsNumber
对每个字符进行简单检查即可。
您可以将它与All
扩展方法结合使用(在C#中,我不知道如何在VB.net中编写它):
string value = "78645655";
bool isValid = value.All(char.IsNumber);
查看其他char
方法,例如IsDigit
。
答案 4 :(得分:3)
2个其他紧凑型解决方案:
没有LINQ:
Dim foo As String = "10004"
Array.Exists(foo.ToCharArray, Function(c As Char) Not Char.IsNumber(c))
使用LINQ(在另一个答案中只是VB.Net相当于C#版本):
foo.All(Function(c As Char) Char.IsNumber(c))
答案 5 :(得分:2)
尚未提及负值,Integer.TryParse
会接受。
我更喜欢拒绝负数的UInteger.TryParse
。但是,如果值以&#34; +&#34;:
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
或ULong.TryParse
代表更大的数字。
答案 6 :(得分:1)
答案 7 :(得分:1)
您可以使用正则表达式或Integer.TryParse,我更喜欢正则表达式检查
答案 8 :(得分:1)
假设您正在查看相对较短的字符串,其数字永远不会超过Max Int32值,请使用Gage的解决方案。如果它是可变长度,有时您可能会溢出,请使用正则表达式(System.Text.RegularExpressions
)
用于检查数字的正则表达式是相当常规的:^[0-9]+$
检查here以获得有关正则表达式的非常好的解释。