检查设定范围之间的值

时间:2016-03-23 15:09:38

标签: ios objective-c

我的用户输入了文字,例如GSM = -73dBm,每次用户输入一段文字时,它将始终具有相同的字母和等号,唯一会改变的是数字,如果是正数或否定的。对于每个值范围,结果变化例如-1到-70是坏的,0到50是好的,51到100是优秀的。我可以想到这样做的唯一方法是列出用户可以输入的每个值。如下所示。

if ([myTextField.text isEqual:@"GSM=-73dBm"]) {
                                    myTextField.text = @"bad";
                                } else if {
                                    etc..}

必须有一种更简单的方法来检查。

3 个答案:

答案 0 :(得分:1)

NSString* target = @"GSM=-73dBm";
NSScanner* sc = [[NSScanner alloc] initWithString:target];
[sc scanUpToString:@"=" intoString:nil];
[sc scanString:@"=" intoString:nil];
NSInteger i;
[sc scanInteger:&i];

现在i是数字-73,你可以做几个测试,看看它的范围是什么。

答案 1 :(得分:1)

所以你可以过滤掉这样的所有非数值。

NSString *stringToFilter = @"GSM=-73dBm";


NSMutableString *targetString = [NSMutableString string];


//these are characters that you want to keep, so numbers and negative sign
NSCharacterSet *required = [NSCharacterSet characterSetWithCharactersInString:@"-0123456789"];


for(int i = 0; i < [stringToFilter length]; i++)
{
    unichar curChar = [stringToFilter characterAtIndex:i];
    if([required characterIsMember:curChar])
    {
        [targetString appendFormat:@"%C", curChar];
    }
}

//convert string to int value
int yourNumber = targetString.intValue;
NSLog(@"%d",yourNumber);

这将打印“-73”。 然后从这里你可以if else并检查值是否包含在某个范围内。

答案 2 :(得分:0)

您可以使用正则表达式

提取数字
NSString *string = @"GSM=-73dBm";
NSString *pattern = @"-?\\d+";
NSError *error;

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:nil error:&error];
if (!error) {
   NSRange result = [regex rangeOfFirstMatchInString:string options: nil range: NSMakeRange(0, string.length)];
   NSInteger number = [[string substringWithRange:result] integerValue];
   NSLog(@"%ld", number);
} else {
   NSLog(@"%@", error);
}

模式:

  • -?可选的减号,如果还有加号,请使用[+-]?
  • \\d+一个或多个数字字符