objective-c nsstring

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