2010-07-30 36 views
5

Tôi muốn chạy một kiểm tra trên một Chuỗi ngay trước khi tôi thêm nó vào một StringBuilder để đảm bảo chỉ các ký tự số nằm trong chuỗi. Cách đơn giản để làm điều đó là gì?Chỉ kiểm tra các chữ số trong VB.NET Chuỗi

+1

Xác định ký tự số? Bạn chỉ xem xét 0 đến 9, hay ký tự thập phân hexa? '0x87' có hợp lệ không? –

+0

Chỉ với 0-9 tôi cần theo dõi – Scott

+0

Chỉ những số dương sau đó? –

Trả lời

8

Sử dụng Integer.TryParse() nó sẽ trả về true nếu chỉ có chữ số trong chuỗi. Giá trị tối đa Int32 là 2.147.483.647 vì vậy nếu giá trị của bạn nhỏ hơn thì tiền phạt của bạn sẽ bị phạt. http://msdn.microsoft.com/en-us/library/f02979c7.aspx

Bạn cũng có thể sử dụng Double.TryParse() có giá trị tối đa là 1.7976931348623157E + 308 nhưng nó sẽ cho phép dấu thập phân.

Nếu bạn đang tìm kiếm để có được những giá trị mà isnt một số nguyên bạn luôn có thể đi qua các chuỗi cùng một lúc

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

Nếu append vẫn đúng thì chuỗi là một số nguyên. Có lẽ là một cách khéo léo hơn để làm điều này nhưng điều này sẽ làm việc.

+1

Miễn là chuỗi không lớn hơn Int32 tối đa. – AllenG

+0

Điều đó sẽ không hoạt động nếu chuỗi quá dài dẫn đến tràn số nguyên – Rockcoder

+0

Khá nhiều Tôi chỉ muốn đảm bảo một chuỗi chỉ có các ký tự số, và nếu không, tôi cần phải tìm vị trí trong chuỗi đó ký tự không phải là số, và xem giá trị là gì – Scott

1

So khớp mẫu! Xem this, this (about.com) và this (bài viết trên VB.NET).

1

Bạn có thể sử dụng biểu thức chính quy hoặc Integer.TryParse và tôi thích việc kiểm tra biểu thức chính quy

4

Sử dụng biểu thức thông thường:

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

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

UPDATE:

Bạn cũng có thể sử dụng LINQ để thực hiện cùng nhiệm vụ nếu bạn đang làm nó trong 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

Cụm từ thông dụng là giải pháp thanh lịch hơn IMHO. Chúng tôi sử dụng RE cho hầu hết các xác nhận đầu vào của chúng tôi và quét dữ liệu. – knslyr

1

Giả sử bạn đang xem các chuỗi tương đối ngắn sẽ không bao giờ có số lớn hơn giá trị Max Int32, hãy sử dụng giải pháp của Gage. Nếu đó là một chiều dài thay đổi và đôi khi bạn có thể tràn, sử dụng Regex (System.Text.RegularExpressions)

Các regex để kiểm tra đối với chỉ số là khá thường xuyên: ^[0-9]+$

Kiểm tra here cho một lời giải thích rất tốt của Regex.

3

Nếu bạn không muốn sử dụng RegEx, hãy kiểm tra đơn giản từng ký tự với char.IsNumber hoạt động.

Bạn có thể kết hợp nó với các phương pháp All mở rộng (trong C#, tôi không biết làm thế nào để viết nó trong VB.net):

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

Check-out char phương pháp khác, như IsDigit.

+1

Thật không may VB sẽ không cho phép bạn viết một cái gì đó thanh lịch. Bạn sẽ kết thúc với 'value.All (Hàm (c) Char.IsNumber (c))' –

3

2 giải pháp nhỏ gọn khác:

Without LINQ:

Dim foo As String = "10004" 
Array.Exists(foo.ToCharArray, Function(c As Char) Not Char.IsNumber(c)) 

Với LINQ (chỉ VB.Net tương đương với phiên bản C# trong câu trả lời khác):

foo.All(Function(c As Char) Char.IsNumber(c)) 
8

Mã hóa trong VB .Net để kiểm tra xem chuỗi có chứa giá trị số duy nhất hay không.

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

Giá trị âm chưa được đề cập, trong đó Integer.TryParse sẽ chấp nhận.

Tôi thích UInteger.TryParse sẽ từ chối một số âm. Tuy nhiên, có yêu cầu séc bổ sung trong trường hợp giá trị bắt đầu bằng "+":

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 

hoặc ULong.TryParse cho số lớn hơn.

Các vấn đề liên quan