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

n.e*_*ind 9 compare objective-c nsstring

我想检查一个字符串是否有一个特定的后缀,但是想做一个不区分大小写的检查.我需要一个替代方案:

if ([selectedFile hasSuffix:@"jpg"] ||
    [selectedFile hasSuffix:@"JPG"]) 
Run Code Online (Sandbox Code Playgroud)

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

mip*_*adi 15

[[selectedFile lowercaseString] hasSuffix:@"jpg"]
Run Code Online (Sandbox Code Playgroud)


Don*_*mer 15

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

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

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

如果您正在为iOS编写UIImage,则UIImage类参考中列出了可识别的图像格式及其扩展名.

如果您正在为Mac OS编写,请NSImage调用一个类方法imageFileTypes,允许支持的格式在运行时更改.

UIImage类参考中所述,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.
}
Run Code Online (Sandbox Code Playgroud)

测试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.
}
Run Code Online (Sandbox Code Playgroud)

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

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