2010-07-30 40 views
5

Quiero ejecutar una comprobación en una cadena justo antes de anexarlo a un StringBuilder para asegurarme de que solo haya caracteres numéricos en la cadena. ¿Cuál es una manera simple de hacer eso?Buscar solo dígitos en VB.NET String

+1

¿Define el carácter numérico? ¿Considera solo de 0 a 9, o hexa decimal también? ¿Es '0x87' válido? –

+0

Sip solo 0-9 Necesito hacer un seguimiento de – Scott

+0

Solo cifras positivas, entonces? –

Respuesta

8

Utilice Integer.TryParse() devolverá true si solo hay dígitos en la cadena. El valor máximo de Int32 es 2.147.483.647, por lo tanto, si su valor es menor, entonces su multa. http://msdn.microsoft.com/en-us/library/f02979c7.aspx

También puede usar Double.TryParse() que tiene un valor máximo de 1.7976931348623157E + 308 pero permitirá un punto decimal.

Si lo que buscas para obtener el valor que isnt un número entero que puede ir siempre a través de la cadena de uno a la vez

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

añadir, si se mantiene fiel a continuación, la cadena es un número entero. Probablemente una forma más hábil de hacer esto, pero esto debería funcionar.

+1

Siempre que la cadena no sea mayor que la Int32 máxima. – AllenG

+0

Eso no funcionará si la cadena es demasiado larga, lo que da como resultado el desbordamiento de entero – Rockcoder

+0

Bastante solo quiero asegurarme de que una cadena solo tenga caracteres numéricos, y si no es así, necesito encontrar la ubicación en esa cadena donde el carácter no numérico se encuentra, y ver cuál es el valor – Scott

1

¡Coincidencia de patrón! Consulte this, this (about.com) y this (artículo de desarrollo de VB.NET).

1

Puede utilizar expresiones regulares o Integer.TryParse y prefiero el cheque expresión regular

4

utilizar expresiones regulares:

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

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

ACTUALIZACIÓN:

También es posible usar LINQ para realizar la misma tarea si lo está haciendo en 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

Expresiones regulares es la solución más elegante en mi humilde opinión. Usamos RE para la mayor parte de nuestra validación de entrada y depuración de datos. – knslyr

1

Suponiendo que usted está buscando en cadenas relativamente cortas, que nunca tendrá un número mayor que el valor máximo Int32, utilizar la solución de Gage. Si se trata de una longitud variable y, a veces podría desbordarse, utilizar expresiones regulares (System.Text.RegularExpressions)

La expresión regular para comprobar contra sólo números es bastante rutinaria: ^[0-9]+$

Comprobar here por una muy buena explicación de expresiones regulares.

3

Si no desea usar RegEx, funciona una simple comprobación de cada carácter con char.IsNumber.

Se puede combinar con el método All extensión (en C#, no sé cómo se escribe en VB.net):

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

Salida otro método char, como IsDigit. otros

+1

Desafortunadamente, VB no te permitirá escribir algo tan elegante. Terminarías con 'value.All (Function (c) Char.IsNumber (c))' –

3

2 soluciones compactas:

Sin LINQ:

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

Con LINQ (justo VB.Net equivalente de la versión C# en otra respuesta):

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

Codificación en VB .Net para verificar si una cadena contiene solo valores numéricos o no.No se han mencionado

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

valores negativos, que Integer.TryParse aceptarían.

Prefiero UInteger.TryParse que rechazará un número negativo. Sin embargo, hay una comprobación adicional requerida en caso de que el valor comienza con "+":

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 

o ULong.TryParse para un número mayor.

Cuestiones relacionadas