2010-07-30 40 views
5

我想在將字符串追加到StringBuilder以確保數字字符在字符串中之前對字符串執行檢查。什麼是簡單的方法來做到這一點?檢查VB.NET中的唯一數字字符串

+1

定義數字字符?你只考慮0到9,還是十六進制字符? 0x87是否有效? – 2010-07-30 19:09:35

+0

是隻有0-9我需要跟蹤 – Scott 2010-07-30 19:10:28

+0

只有正數呢? – 2010-07-30 19:53:41

回答

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; 
      } 
     } 

心不是一個整數,你可以隨時通過串一氣呵成值。如果追加保持真,那麼該字符串是一個整數。這可能是一個更光滑的做法,但這應該起作用。

+1

只要字符串不大於最大Int32。 – AllenG 2010-07-30 19:07:35

+0

如果字符串太長導致整數溢出,那麼這將不起作用 – Rockcoder 2010-07-30 19:08:16

+0

幾乎我只是想確保一個字符串只有數字字符,如果它沒有,我需要找到該字符串中的位置該數字字符位於,看看是什麼值 – Scott 2010-07-30 19:11:02

1

模式匹配!請參閱this,this(about.com)和this(VB.NET dev文章)。

1

您可以使用正則表達式或Integer.TryParse,我更喜歡正則表達式檢查

4

使用正則表達式:

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

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

UPDATE:

你也可以使用LINQ來完成相同的任務,如果你在VB.Net 2008/2010做。

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 
+0

正則表達式是更優雅的解決方案恕我直言。我們使用RE來處理大部分輸入驗證和數據清理。 – knslyr 2010-08-01 01:39:53

1

假設您正在查看相對較短的字符串,該字符串永遠不會大於最大Int32值,請使用Gage的解決方案。如果這是一個可變長度的,有時你可能溢出,使用正則表達式(System.Text.RegularExpressions

正則表達式針對只是數字檢查是相當常規:對正則表達式的一個很好的解釋^[0-9]+$

檢查here

3

如果您不希望使用RegEx,請使用char.IsNumber對每個字符進行簡單檢查。

您可以用All擴展方法結合起來(在C#中,我不知道如何把它寫在VB.net):

string value = "78645655"; 
bool isValid = value.All(char.IsNumber); 

退房等char方法,如IsDigit

+1

不幸的是VB不會讓你寫出優雅的東西。你最終會得到'value.All(Function(c)Char.IsNumber(c))' – 2013-03-13 18:59:21

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)) 
8

在VB編碼.Net來檢查一個字符串是否只包含數字值。

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

負值未被提及,其中Integer.TryParse會接受。

我更喜歡UInteger.TryParse,它會拒絕一個負數。然而,存在的情況下需要額外的校驗值與「+」開頭:

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爲更大的數字。