如何确定NSString是否全部大写

use*_*239 1 nsstring ios

我如何确定字符串是否全部大写?

我知道你可以检查每个角色是否属于upperCase字符集,但有更快的方法吗?

use*_*321 8

你可以尝试类似的东西:

if ([[s uppercaseStringWithLocale:[NSLocale currentLocale]] isEqualToString:s])
{
    // ... s is uppercase ...
}
else
{
    // ... s is not all uppercase ...
}
Run Code Online (Sandbox Code Playgroud)


lna*_*ger 7

有几种不同的方法可以解释您的问题,每个示例都只测试您的字符串,而无需创建新副本:

1)您希望确保字符串中的所有字母都是大写的(但仍允许使用其他字符,如标点符号,数字和空格).例:

NSCharacterSet *lowerCaseSet = [NSCharacterSet lowercaseLetterCharacterSet];

if ([myString rangeOfCharacterFromSet:lowerCaseSet].location == NSNotFound)
    NSLog(@"String is in upper case.");
else
    NSLog(@"String has invalid characters.");
Run Code Online (Sandbox Code Playgroud)

2)您希望确保字符串中的所有字符都是大写字符(并且不允许其他字符).例:

NSCharacterSet *invalidCharacterSet = [[NSCharacterSet uppercaseLetterCharacterSet] invertedSet];

if ([myString rangeOfCharacterFromSet:invalidCharacterSet].location == NSNotFound)
    NSLog(@"String has only upper case characters.");
else
    NSLog(@"String has invalid characters.");
Run Code Online (Sandbox Code Playgroud)

3)您希望确保字符串中的所有字符都是大写字符或空格(并且不允许其他字符).例:

NSMutableCharacterSet *allowedCharacterSet = [NSMutableCharacterSet uppercaseLetterCharacterSet];
[allowedCharacterSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
NSCharacterSet *invalidCharacterSet = [allowedCharacterSet invertedSet];

if ([myString rangeOfCharacterFromSet:invalidCharacterSet].location == NSNotFound)
    NSLog(@"String has only upper case characters and/or white space.");
else
    NSLog(@"String has invalid characters.");
Run Code Online (Sandbox Code Playgroud)