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

Ios 如何确定TextField是否包含数字字符串?,ios,introspection,nsnumber,Ios,Introspection,Nsnumber,我从TextField获取一个值,我需要检查其中是否有数字。它是浮点数还是整数并不重要,但绝对是一个“数字” 我怎么能抓住这个 这就是我目前正在做的事情——即使obj是123(实际上是一个数字),条件是false,因此我无法进入if。我已经尝试了NSValue和Data,但结果相同 id obj = self.textArea.text; if ([obj isKindOfClass:[NSNumber class]]) { self.weight = [NSNumber number

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

我怎么能抓住这个

这就是我目前正在做的事情——即使obj是123(实际上是一个数字),条件是false,因此我无法进入
if
。我已经尝试了
NSValue
Data
,但结果相同

id obj = self.textArea.text;

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

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

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

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

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

使用:


使用正则表达式测试该值,然后一旦知道它是一个数字,就可以执行任何其他需要执行的操作

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
}

您可能需要检查这个问题:您不应该检查NSNumber类上的obj。它将作为NSString类。但第二行是可以的。可能重复的我实际上更喜欢使用数字格式化程序来确保我们只从文本字段中得到有效的数字。如果有非数字字符,数字到底应该是什么??另外,
float
是出了名的不精确,如果以后需要向用户显示,通常不会给出准确的输入值。如果您想要标量类型(即使他将其存储为
NSNumber
),则至少使用
double
“我需要检查其中是否有数字”。据我所知,字符串中可能有数字,也可能没有。如果这是正确的,您不能使用数字格式化程序,因为在这种情况下它将返回nil。好吧,我将其解释为检查文本字段中是否有数字,并且由于他将其存储为
NSNumber
中的
self.weight
,这是有意义的。无论如何,如果混合了数字和非数字字符,那么应该以某种方式对它们进行解析,以确保它们仍然有效……当然。如果您的解释是正确的,我也会使用数字格式化程序。使用NSNumberFormatter是一种方法。它也处理小数点。
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
}