我从TextField
获得了一个值,我需要检查其中是否有数字。无论是浮点数还是整数都不重要,但绝对是“数字”
我怎么能抓住这个?
这就是我到目前为止所做的 - 即使obj是123(实际上是一个数字),条件是假的,所以我无法进入if
。我已经尝试了NSValue
和Data
,但结果相同。
id obj = self.textArea.text;
if ([obj isKindOfClass:[NSNumber class]]) {
self.weight = [NSNumber numberWithFloat:([self.textArea.text floatValue])];
答案 0 :(得分:6)
文本字段的text
始终为NSString
,因为这就是课程的设计方式。
然后,您的任务是将其转换为NSNumber
。最好的方法是使用这样的数字格式化程序:
NSNumberFormatter *formatter = [NSNumberFormatter new];
self.weight = [formatter numberFromString:self.textArea.text];
if (!self.weight) {
// No valid number was found.
}
答案 1 :(得分: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");
}
答案 2 :(得分: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
}