-2

我正在尝试编写一个函数,如果给定的字符串是否为有效的小数格式,则返回布尔值。

例如分数数如下 2/3、1 2/3、6/5、80/20、60 1/4 等。

-(BOOL)validateFraction:(NSString *)string
{
  if(string is valid fraction)
    return YES;
  else 
    return NO;
}
4

3 回答 3

6

您可以为此使用正则表达式:

-(BOOL)validateFraction:(NSString *)string{
    NSString *fractionRegex = @"\\d+(/\\d+)?";
    NSPredicate *fractionTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", fractionRegex];
    return [fractionTest evaluateWithObject:string];
}

PS 也不是,该函数不验证除以零并且不允许分数在前面有符号(+ 或 -)

于 2013-08-28T13:58:01.490 回答
2

我找到了一个接受数字的解决方案,例如 1/2
10 2/3
5 6/8
等。

-(BOOL)validateFraction:(NSString *)string{
    NSString *fractionRegex = @"[1-9]?[ ]?[0-9]+/[1-9]+";
    NSPredicate *fractionTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", fractionRegex];
    return [fractionTest evaluateWithObject:string];
}
于 2013-08-29T11:42:12.853 回答
1

你可以这样做:

-(BOOL)validateFraction:(NSString *)string
{
   if ([string rangeOfString:@"/"].location == NSNotFound) {
      return NO;
   }

   return YES;
}

此代码只会查看字符串是否@"/"在给定字符串中显示为子字符串。

如您所见,这是一个非常简单的解决方案,如果您知道要测试的字符串都是数字有效的字符串,则可能会起作用。如果您想要更强大的东西,测试“无效”字符串,只需使用正则表达式,就像@Vladimir's answer

于 2013-08-28T13:57:40.847 回答