Objective c: Check if integer/int/number
Solution 1
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!
Solution 2
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
}
Solution 3
I've put this in my category NSString (Util)
.
- (BOOL) isInt {
if ([self isEqualToString:@"0"])
return YES;
return (self.intValue != 0);
}
Solution 4
To check if a NSNumber if an integer try:
const char *t = [(NSNumber *)value objCType];
if (strcmp("i", t) == 0); // YES if integer
Solution 5
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)
}
Comments
-
Daniel almost 4 years
In objective c, how can i check if a string/NSNumber is an integer or int
-
Daniel over 13 yearsHow can i find if a variable is a string?
-
codykrieger over 13 yearsAs in, you want to check and see if some user input is just a plain old string or a number? Like I said above, intValue returns 0 for when an NSString is not a valid integer. Say you're getting info from a UITextView - [[myTextView text] intValue] would return a valid int if possible, or 0 if it can't be validated as an int.
-
Daniel over 13 yearsWell see the problem is. Sometimes the user will not enter any input. because it is not required. And since i'm using an array and grabbing the object from it. I'm getting *** -[NSCFArray objectAtIndex:]: index (3) beyond bounds (3) i need to check if the array is valid somehow?
-
TOMKA over 13 yearsWhat if the string represents the actual integer value 0?
-
codykrieger over 13 yearsCould you maybe post some of your code so we can get a better feel for what's going on?
-
jpswain over 12 years@Daniel you could create a notNil helper method and then assign NSNull to your array if a value is nil. like this: -(id)notNil:arg { if (arg == nil) { return [NSNull null]; } else { return arg; } This is working well for me.
-
Scott Means over 12 yearsI thought I was the only one who did the !! hack to coerce to boolean. Nice!
-
ekinnear over 11 yearsYou can check if that value is in the array (if you're referring to the index) because it will be between 0 and [array count] -1
-
lindon fox about 11 yearsThis question is better than the approved answer because it gives you a true/false result. The approved answer does not.
-
hebime over 10 yearsBe careful with this. This will only return 0 if the string doesn't begin with an integer value. Something like "123 street" will still return the integer 123. Source: developer.apple.com/library/mac/documentation/Cocoa/Reference/…
-
jcesarmobile over 10 yearsThis is better, because the accepted answer doesn't work as expected if you check a string with letters that starts with number. Example "1234asdf" will return 1234, not 0, this returns NO. And "000" will return 0 and you might think is wrong but it's not
-
aroth about 10 yearsNot the best solution. Note that
[@"abc" intValue]
will return0
. Can lead to confusing results. -
kraftydevil over 9 yearsI couldn't use this because it didn't work in all cases.
-
XMB5 almost 4 yearsWould this depend on the user's locale?