不区分大小写的NSString后缀检查

时间:2012-08-20 20:13:35

标签: objective-c nsstring compare

我想检查字符串是否有某个后缀,但是想要进行不区分大小写的检查。我需要一个替代方案:

if ([selectedFile hasSuffix:@"jpg"] ||
    [selectedFile hasSuffix:@"JPG"]) 

或jPg,jpG,Jpg。有没有简短的方法来做到这一点?在这种情况下,我不知道如何应用caseInsensitiveCompare:

3 个答案:

答案 0 :(得分:15)

如果selectedFile是文件名,则最好查看整个扩展名。你不太可能找到一个标题为 ThisIsNotAnImage.asdfjpg 的文件。如果您只是检查后缀,则会错误地断定这是一张图片。

幸运的是NSString有许多处理路径的方法,包括pathExtension

此外,您是否希望始终只接受JPEG图像或您可以加载的所有图像? Apple的大多数图像类都支持一系列令人印象深刻的文件格式。

如果您是为iOS编写的,UIImage识别的图像格式及其扩展名列在UIImage Class Reference中。

如果您是为Mac OS编写的,NSImage有一个名为imageFileTypes的类方法,允许支持的格式在运行时更改。

UIImage Class Reference所述,JPEG文件有时会扩展名为 .jpeg 。如果您手动查找JPEG,则应检查 .jpg .jpeg

仅测试JPEG

NSString *extension = [selectedFile pathExtension];
BOOL isJpegImage = 
    (([extension caseInsensitiveCompare:@"jpg"] == NSOrderedSame) || 
     ([extension caseInsensitiveCompare:@"jpeg"] == NSOrderedSame));

if (isJpegImage)
{
    // Do image things here.
}

测试UIImage可以加载的所有内容

NSString *loweredExtension = [[selectedFile pathExtension] lowercaseString];
// Valid extensions may change.  Check the UIImage class reference for the most up to date list.
NSSet *validImageExtensions = [NSSet setWithObjects:@"tif", @"tiff", @"jpg", @"jpeg", @"gif", @"png", @"bmp", @"bmpf", @"ico", @"cur", @"xbm", nil];
if ([validImageExtensions containsObject:loweredExtension])
{
    // Do image things here.
}

测试NSImage可以加载的所有内容

NSString *loweredExtension = [[selectedFile pathExtension] lowercaseString];
NSSet *validImageExtensions = [NSSet setWithArray:[NSImage imageFileTypes]];
if ([validImageExtensions containsObject:loweredExtension])
{
    // Do image things here.
}

答案 1 :(得分:14)

[[selectedFile lowercaseString] hasSuffix:@"jpg"]

答案 2 :(得分:2)

mipadi的建议是最好的,但既然你提到了caseInsensitiveCompare:,那就是你如何使用它:

BOOL hasSuffix = (NSOrderedSame == [[selectedFile substringFromIndex:[selectedFile length] - 3]] caseInsensitiveCompare:@"JPG"]);

那是满口的!

您还可以使用rangeOfString:options:,传递后缀和NSCaseInsensitiveSearch