Objective c: Check if integer/int/number

前端 未结 6 2125
不知归路
不知归路 2021-02-13 02:25

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

相关标签:
6条回答
  • 2021-02-13 03:02

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

    - (BOOL) isInt {
        if ([self isEqualToString:@"0"])
            return YES;
        return (self.intValue != 0);
    }
    
    0 讨论(0)
  • 2021-02-13 03:08

    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!

    0 讨论(0)
  • 2021-02-13 03:10
    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.

    0 讨论(0)
  • 2021-02-13 03:11

    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
    }
    
    0 讨论(0)
  • 2021-02-13 03:12

    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)
    }
    
    0 讨论(0)
  • 2021-02-13 03:19

    To check if a NSNumber if an integer try:

    const char *t = [(NSNumber *)value objCType];
    if (strcmp("i", t) == 0); // YES if integer
    
    0 讨论(0)
提交回复
热议问题