5

我从 a 得到一个值TextField,我需要检查其中是否有数字。是浮点数还是整数并不重要,但绝对是“数字”

我怎么能抓住这个?

这就是我目前正在做的事情——即使 obj 是 123(实际上是一个数字),条件也是错误的,所以我无法进入if. 我已经尝试过NSValueand Data,但结果相同。

id obj = self.textArea.text;

if ([obj isKindOfClass:[NSNumber class]]) {
    self.weight = [NSNumber numberWithFloat:([self.textArea.text floatValue])];
4

3 回答 3

6

文本字段的text始终是 a NSString,因为这就是类的设计方式。

那么,您的任务是将其转换为NSNumber. 最好的方法是使用这样的数字格式化程序:

NSNumberFormatter *formatter = [NSNumberFormatter new];
self.weight = [formatter numberFromString:self.textArea.text];
if (!self.weight) {
    // No valid number was found.
}
于 2013-06-28T01:49:53.287 回答
0

您不能使用floatValue,因为如果有 0 或根本没有数字,它将返回 0.0。如果文本字段中有非数字字符,则不能按照 Inafziger 的建议使用 NSNumberFormatter。

利用:

NSCharacterSet *numberSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
NSRange numberRange = [self.textArea.text rangeOfCharacterFromSet:numberSet];
if (numberRange.location == NSNotFound) {
    NSLog(@"no");
} else {
    NSLog(@"yay");
}
于 2013-06-28T01:54:29.330 回答
0

使用正则表达式来测试该值,然后一旦你知道它是一个数字,你就可以做任何你需要的事情。

NSError *error = NULL;
NSString *pattern = @"^[0-9]*\.?[0-9]+$"
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive erro:&error];
NSUInteger matches = [regex numberOfMatchesInString:self.textarea.text options:0 range:NSMakeRange(0, [self.textarea.text length])];
if (matches > 0)
{
     // do whatever you need to do now that you know it's a number
}
于 2013-06-28T03:12:19.147 回答