确定NSString的第一个字符是否为数字

时间:2011-03-05 18:17:01

标签: iphone objective-c xcode nsstring numbers

我只是想知道如何确定NSStrings的第一个字符是否为数字。

5 个答案:

答案 0 :(得分:21)

BOOL hasLeadingNumberInString(NSString* s) {
if (s)
    return [s length] && isnumber([s characterAtIndex:0]);
else
    return NO;

}

如果您一次处理多个NSStrings(比如循环遍历数组)并且您想要检查每个NSStrings的格式如前导数字,那么最好包括检查,这样您就不会尝试评估空的或不存在的字符串。

示例:

NSString* s = nil; //Edit: s needs to be initialized, at the very least, to nil.
hasLeadingNumberInString(s);          //returns NO
hasLeadingNumberInString(@"");        //returns NO
hasLeadingNumberInString(@"0123abc"); //returns YES

答案 1 :(得分:8)

是。你可以这样做:

NSString *s = ...; // a string
unichar c = [s characterAtIndex:0];
if (c >= '0' && c <= '9') {
    // you have a number!
}

答案 2 :(得分:7)

我可以想到两种方法。你可以用

[string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == 0

或者你可以使用

[[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]]

答案 3 :(得分:5)

检查返回值:

[myString rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]];

如果返回范围的location值为0,则第一个字符匹配。

答案 4 :(得分:4)

不是使用扫描整个字符串的调用,而是最好拔出第一个字符,然后查看它是什么:

char test = [myString characterAtIndex:0];
if (test >= '0' && test <= '9')
  return YES
else
  return NO