objective c - Cómo verificar si NSString es numérico o no
objective-c (2)
Puedes usar rangeOfCharacterFromSet:
:
@interface NSString (isNumber)
-(BOOL)isInteger;
@end
@interface _IsNumber
+(void)initialize;
+(void)ensureInitialization;
@end
@implementation NSString (isNumber)
static NSCharacterSet* nonDigits;
-(BOOL)isInteger {
/* bit of a hack to ensure nonDigits is initialized. Could also
make nonDigits a _IsNumber class variable, rather than an
NSString class variable.
*/
[_IsNumber ensureInitialization];
NSRange nond = [self rangeOfCharacterFromSet:nonDigits];
if (NSNotFound == nond.location) {
return YES;
} else {
return NO;
}
}
@end
@implementation _IsNumber
+(void)initialize {
NSLog(@"_IsNumber +initialize/n");
nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
}
+(void)ensureInitialization {}
@end
Posible duplicado:
iphone cómo comprobar que una cadena es numérica solamente
Tengo una NSString, entonces quiero verificar si la cadena es número o no.
quiero decir
NSString *val = @"5555" ;
if(val isNumber ){
return true;
}else{
retun false;
}
¿Cómo puedo hacer esto en el Objetivo C?
Utilice [NSNumberFormatter numberFromString: s]
. Devuelve nil si la cadena especificada no es numérica. Puede configurar el NSNumberFormatter para definir "numérico" para su escenario particular.
#import <Foundation/Foundation.h>
int
main(int argc, char* argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLocale *l_en = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US"];
NSLocale *l_de = [[NSLocale alloc] initWithLocaleIdentifier: @"de_DE"];
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setLocale: l_en];
NSLog(@"returned: %@", [f numberFromString: @"1.234"]);
[f setAllowsFloats: NO];
NSLog(@"returned: %@", [f numberFromString: @"1.234"]);
[f setAllowsFloats: YES];
NSLog(@"returned: %@", [f numberFromString: @"1,234"]);
[f setLocale: l_de];
NSLog(@"returned: %@", [f numberFromString: @"1,234"]);
[l_en release];
[l_de release];
[f release];
[pool release];
}