我正在尝试编写一个函数,如果给定的字符串是否为有效的小数格式,则返回布尔值。
例如分数数如下 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;
}
我正在尝试编写一个函数,如果给定的字符串是否为有效的小数格式,则返回布尔值。
例如分数数如下 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;
}
您可以为此使用正则表达式:
-(BOOL)validateFraction:(NSString *)string{
NSString *fractionRegex = @"\\d+(/\\d+)?";
NSPredicate *fractionTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", fractionRegex];
return [fractionTest evaluateWithObject:string];
}
PS 也不是,该函数不验证除以零并且不允许分数在前面有符号(+ 或 -)
我找到了一个接受数字的解决方案,例如 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];
}
你可以这样做:
-(BOOL)validateFraction:(NSString *)string
{
if ([string rangeOfString:@"/"].location == NSNotFound) {
return NO;
}
return YES;
}
此代码只会查看字符串是否@"/"
在给定字符串中显示为子字符串。
如您所见,这是一个非常简单的解决方案,如果您知道要测试的字符串都是数字有效的字符串,则可能会起作用。如果您想要更强大的东西,测试“无效”字符串,只需使用正则表达式,就像@Vladimir's answer