objective-c - una - validar numeros en c
Objetivo c: verificar si es entero/int/nĂºmero (6)
Para verificar si un NSNumber si un entero intente:
const char *t = [(NSNumber *)value objCType];
if (strcmp("i", t) == 0); // YES if integer
En el objetivo c, ¿cómo puedo verificar si una cadena / NSNumber es un entero o int
Puede usar el método intValue en NSString:
NSString *myString = @"123";
[myString intValue]; // returns (int)123
Aquí está la documentación de Apple: devolverá 0 si no es un número entero válido: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html # // apple_ref / occ / instm / NSString / intValue
¡Espero que ayude!
if( [(NSString *)someString intValue] )
{ /* Contains an int fosho! */ }
if( [(NSNumber *)someNumber intValue] )
{ /* Contains an int wich is not 0.... :D */ }
Por supuesto, primero puede determinar si es un NSString o NSNumber mediante el uso de
[El objeto es KindOfClass: [clase NSString]] etc ...
- boolValue - charValue - decimalValue - doubleValue - floatValue - intValue - integerValue - longLongValue - longValue - shortValue - unsignedCharValue - unsignedIntegerValue - unsignedIntValue - unsignedLongLongValue - unsignedLongValue - unsignedShortValue
son todos los métodos de NSNumber para obtener sus valores. NSString obtuvo algunos similares.
Lo puse en mi categoría NSString (Util)
.
- (BOOL) isInt {
if ([self isEqualToString:@"0"])
return YES;
return (self.intValue != 0);
}
Si está tratando de determinar si un NSString
tiene o no un valor numérico, intente usar NSNumberFormatter
.
-(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
}
Para NSString, si utiliza intValue / integerValue, hay ciertos casos que no se manejan, ya que solo tiene en cuenta el comienzo de la cadena.
Por ejemplo, @ "bl3h" no se consideró un entero, pero @ "3h" dio una salida de 3
Mi solución para NSString:
Utilizar :
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName];
NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet];
if([numSet isSupersetOfSet: charSet])
{
// It is an integer (or it contains only digits)
}