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

5

我从一个 TextField 中获取一个值,我需要检查其中是否有数字。它是浮点数还是整数并不重要,但一定是“数字”。

我该如何判断呢?

目前我已经做的是-即使obj是123(实际上是数字),条件仍为false,因此我无法进入if语句。我已经尝试过NSValueData,但结果相同。

id obj = self.textArea.text;

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

4
你可能需要检查这个问题:https://dev59.com/52025IYBdhLWcg3wSkAq - Hejazi
1
你不应该在NSNumber类上检查obj。它将作为NSString类。但第二行没问题。 - stosha
可能是重复的问题:如何将NSString转换为NSNumber - Monolo
3个回答

6

文本字段的text属性始终是NSString类型,因为这就是该类的设计。

因此,您的任务是将其转换为NSNumber。最好的方法是使用数字格式化程序,如下所示:

NSNumberFormatter *formatter = [NSNumberFormatter new];
self.weight = [formatter numberFromString:self.textArea.text];
if (!self.weight) {
    // No valid number was found.
}

1
使用NSNumberFormatter是正确的方法。它也处理小数点。 - Rick

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");
}

我更喜欢使用数字格式化程序来确保我们只从文本字段中得到有效的数字。如果存在非数字字符,那么这个数字到底应该是什么呢?此外,“float”通常不精确,如果您需要在以后向用户显示它,则通常不会给出精确输入的值。如果您想要一个标量类型(即使他将其存储为“NSNumber”),那么至少使用“double”。 - lnafziger
我需要检查其中是否有数字。据我所理解,字符串中可能包含数字,也可能不包含数字。如果是这样,您不能使用数字格式化程序,因为在这种情况下它会返回nil。 - Danilo
我理解这段代码是检查文本字段中是否有数字,因为他将其存储为self.weight中的NSNumber,所以这很合理。无论如何,如果存在数字和非数字字符的混合,则应以某种方式对它们进行解析,以确保它们有效... - lnafziger
1
当然。如果你的理解是正确的,我也会使用数字格式化工具。 - Danilo

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接