2011-02-01 26 views
6

El siguiente código identificará si una cadena es un número entero, es decir, la cadena contiene solo dígitos. Pero, odio este código. ¿Cuál es una mejor manera?¿Cuál es una mejor manera de verificar si una cadena es un número entero en iPhone?

NSString *mightBeAnInteger = fooString; 
int intValue = [fooString intValue]; 
if (intValue > 0 
    && [[NSString stringWithFormat:@"%d",intValue] isEqualToString:mightBeAnInteger]) { 
    NSLog(@"mightBeAnInteger is an integer"); 
} 
+0

posible duplicado de [? NSString es entero] (http://stackoverflow.com/questions/565696/nsstring-is-integer) –

Respuesta

20

[fooString rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location == NSNotFound habrá SÍ si la cadena tiene solamente caracteres numéricos en ella.

Tenga en cuenta que esto no captura los números negativos, por lo que tendrá que agregar el signo negativo (probablemente al tomar un mutableCopy y agregar el signo).

+1

buena respuesta, pero sólo puede utilizar la constructor de NSCharacterSet personalizado characterSetWithCharactersInString: pasando de 0 a 9 + "." Y "-". –

+0

No period-period quería enteros. Personalmente, prefiero agregar el letrero que utilizar el constructor de cadenas, ¡pero así soy yo! – kevboh

+0

Esta respuesta no cubre casos como: @ "1111-1111" que no es un int válido. Es mejor verificar si [fooString intValue] <0 en lugar de simplemente agregar - firmar. –

1
-(BOOL) stringIsNumeric:(NSString *) str { 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    NSNumber *number = [formatter numberFromString:str]; 
    [formatter release]; 
    return !!number; // If the string is not numeric, number will be nil 
} 

fuente: Objective c: Check if integer/int/number

Cuestiones relacionadas