如何确定TextField是否包含数字字符串?

时间:2013-06-28 01:17:31

标签: ios introspection nsnumber

我从TextField获得了一个值,我需要检查其中是否有数字。无论是浮点数还是整数都不重要,但绝对是“数字”

我怎么能抓住这个?

这就是我到目前为止所做的 - 即使obj是123(实际上是一个数字),条件是假的,所以我无法进入if。我已经尝试了NSValueData,但结果相同。

id obj = self.textArea.text;

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

3 个答案:

答案 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
}
相关问题