2008-11-06 18 views

Respuesta

31

¿Qué pasa con una expresión regular:

bool val = System.Text.RegularExpressions.Regex.IsMatch(str, @"\d"); 
+0

Y también eche un vistazo a la respuesta de John M Gant : http://stackoverflow.com/questions/894263/how-to-identify-if-string-contain-a-number –

+1

gracias, justo lo que estaba buscando. – Mana

9

Si están en busca de un valor entero que podría utilizar int.TryParse:

int result; 
if (int.TryParse("123", out result)) 
{ 
    Debug.WriteLine("Valid integer: " + result); 
} 
else 
{ 
    Debug.WriteLine("Not a valid integer"); 
} 

para comprobar un número decimal, reemplace con int.TryParse Decimal.TryParse. Echa un vistazo a esta entrada de blog y comentarios "Why you should use TryParse() in C#" para más detalles.

Si necesita números decimales, se puede usar alternativamente, esta expresión regular:

return System.Text.RegularExpressions.Regex.IsMatch(
    TextValue, @"^-?\d+([\.]{1}\d*)?$"); 

Y finalmente otra alternativa (si no está religiosamente contra VB.NET), se puede utilizar el método en el Microsoft.VisualBasic espacio de nombres:

Microsoft.VisualBasic.Information.IsNumeric("abc"); 
0

Si eres un adicto a LINQ como yo, lo haría de esta manera

string s = "abc1def2ghi"; 
bool HasNumber = (from a in s.ToCharArray() where a >= '0' && a <= '9' select a).Count() > 0; 
+0

Dios mío, eso es horrible. Si encuentro eso en una revisión del código, (a) lo suprimiría; (b) impuestos especiales. – endian

+2

El código no está mal, excepto que debe usar "Any()" en lugar de "Count()> 0" - de esa manera se cortocircuita y no necesita evaluar el resto de la lista ya que sabe que tiene golpea "verdad" ya. –

0

en C# 2.0, intente esto:

 string str = "dfdsfdsf8fdfdfd9dfdfd4"; 

     for (int i = 0; i < str.Length; i++) 
     { 
      int result; 
      if (int.TryParse(str[i].ToString(), out result)) 
      { 
       //element is a number    
      } 
      else 
      { 
       // not a number 
      } 
     } 
6

Si usted va a recorrer la cadena, NO use int.TryParse ... eso es demasiado pesada. En su lugar, use char.IsNumber();

ejemplo:

foreach (char c in myString) 
    if (char.IsNumber(c)) 
     return true; 
+0

En lugar de usar loop, el uso de expresiones regulares es una buena opción. – Shekhar

4
str.ToCharArray().Any(x => char.IsNumber(x)); 
+1

Gracias a ['String.IEnumerable (Of Char) .GetEnumerator'] (http://msdn.microsoft.com/en-us/library/cc672334.aspx), en realidad ni siquiera necesita el' .ToCharArray () 'como la cadena se lanza automáticamente como un enumerable de tipo char. – KyleMit

0
str.ToCharArray().Any(char.IsNumber) 
+0

'Any()' toma un predicado, por lo que no se compilará. Además, esta respuesta exacta fue [ya provista por Kamal] (http: // stackoverflow.com/a/11145727/1366033) – KyleMit

+0

En realidad, ese grupo de métodos es un predicado válido, por lo que se compila, y esta respuesta no es lo mismo que Kamals – andrewtatham

0

combinar partes de respuesta Kamals y respuestas Tristars dar ...

str.Any(char.IsNumber) 

que creo que es la manera más concisa y fácil de leer, en vez de una expresión regular

Cuestiones relacionadas