【问题标题】:How can I determine whether a TextField contains a numeric string?如何确定 TextField 是否包含数字字符串?
【发布时间】:2013-06-25 16:48:11
【问题描述】:

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

我怎样才能捕捉到这个?

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

id obj = self.textArea.text;

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

【问题讨论】:

标签: ios introspection nsnumber


【解决方案1】:

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

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

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

【讨论】:

  • 使用 NSNumberFormatter 是要走的路。它也照顾小数点。
【解决方案2】:

您不能使用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
  • “我需要检查其中是否有数字”。据我了解,字符串中可能有一个数字,也可能没有。如果那是正确的,则不能使用数字格式化程序,因为在这种情况下它将返回 nil。
  • 好吧,我解释为检查是否有一个数字在文本字段中,因为他将它作为NSNumber 存储在self.weight 中说得通。无论如何,如果混合了数字和非数字字符,那么应该以某种方式解析它们以确保它们仍然有效......
  • 当然。如果您的解释是正确的,我也会使用数字格式化程序。
【解决方案3】:

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

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
}

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多