Daniel
Daniel

Reputation: 3077

Objective c: Check if integer/int/number

In objective c, how can i check if a string/NSNumber is an integer or int

Upvotes: 16

Views: 37916

Answers (6)

Shravya Boggarapu
Shravya Boggarapu

Reputation: 592

For NSString, if you use intValue/integerValue, there are certain cases which are not handled as it takes into consideration only the beginning the string.

For example @"bl3h" was not considered an integer but @" 3h" gave an output of 3

My solution for NSString:

Use :

NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName];

NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet];

if([numSet isSupersetOfSet: charSet])
{
     // It is an integer (or it contains only digits)
}

Upvotes: 2

Anshu Chimala
Anshu Chimala

Reputation: 2800

If you're trying to determine whether or not an NSString has a numeric value or not, try using 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
}

Upvotes: 40

Dan Rosenstark
Dan Rosenstark

Reputation: 69757

I've put this in my category NSString (Util).

- (BOOL) isInt {
    if ([self isEqualToString:@"0"])
        return YES;
    return (self.intValue != 0);
}

Upvotes: 4

Antwan van Houdt
Antwan van Houdt

Reputation: 6991

if( [(NSString *)someString intValue] )
{ /* Contains an int fosho! */ }

if( [(NSNumber *)someNumber intValue] )
{ /* Contains an int wich is not 0.... :D */ }

You can ofcourse first determine whether its a NSString or NSNumber by using

[Object isKindOfClass:[NSString class]] etc...

– boolValue – charValue – decimalValue – doubleValue – floatValue – intValue – integerValue – longLongValue – longValue – shortValue – unsignedCharValue – unsignedIntegerValue – unsignedIntValue – unsignedLongLongValue – unsignedLongValue – unsignedShortValue

are all methods of NSNumber to get its values. NSString got a few similar ones.

Upvotes: 0

Kevin Sylvestre
Kevin Sylvestre

Reputation: 38012

To check if a NSNumber if an integer try:

const char *t = [(NSNumber *)value objCType];
if (strcmp("i", t) == 0); // YES if integer

Upvotes: 3

codykrieger
codykrieger

Reputation: 1780

You can use the intValue method on NSString:

NSString *myString = @"123";
[myString intValue]; // returns (int)123

Here is the Apple documentation for it - it will return 0 if it's not a valid integer: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue

Hope that helps!

Upvotes: 12

Related Questions