1
A
回答
6
你可以尝试这样的:
if ([[s uppercaseStringWithLocale:[NSLocale currentLocale]] isEqualToString:s])
{
// ... s is uppercase ...
}
else
{
// ... s is not all uppercase ...
}
0
这取决于一点你在寻找什么。
如果您想知道该字符串是否只包含大写字母。我会寻找[A-Z] *的正则表达式匹配并比较长度。我不确定[A-Z] *对非英文字母的可靠程度。
如果你想知道字符串中是否有小写字母,但你不关心标点符号,user1118321的答案是好的。
6
有几种不同的方式来诠释你的问题,并且每个例子只是测试你的字符串,而无需创建一个新的副本:
1)你想确保所有字母都在字符串中大写(但其他字符,如标点符号,数字和空格仍然是允许的)。例如:
NSCharacterSet *lowerCaseSet = [NSCharacterSet lowercaseLetterCharacterSet];
if ([myString rangeOfCharacterFromSet:lowerCaseSet].location == NSNotFound)
NSLog(@"String is in upper case.");
else
NSLog(@"String has invalid characters.");
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.");
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.");
0
许多很好的答案在这里,所以让我在一个基于正则表达式一个来自几个国家的字母表的字母作品芯片。
Gordon Dove正确地提到传统的[A-Z]*
只与从A到Z的拉丁/英文字母中的实际字符相匹配,并且完全不适用于例如重音字符或其他字母。
因此,为了完整起见,这里是ICU正则表达式,匹配大写字母,如他们所定义的:\p{Lu}
(单个大写字母)。
为了测试它(与一些西欧字符,那我可以输入我的键盘,读者应该随意添加其他):
NSString *lowercase = @"äbcdéfghìjklmñöpqrstûvwxyzæøå";
NSString *mixedcase = @"ÄbcDÉFGHïjkLmÑÖpqrstÛvwxyzÆøÅ";
NSString *uppercase = @"ÄBCDÉFGHÏJKLMÑÖPQRSTÛVWXYZÆØÅ";
NSArray *cases = @[lowercase, mixedcase, uppercase];
NSString *uppercasePattern = @"\\p{Lu}*"; // Letter, uppercase, zero or more occurrences
NSPredicate *ucPred = [NSPredicate predicateWithFormat:@"self MATCHES %@", uppercasePattern];
NSArray *ucArray = [cases filteredArrayUsingPredicate:ucPred];
如果你只需要测试一个字符串,可以直接使用谓词:
if ([ucPred evaluateWithObject:uppercase]) {
NSLog(@"It's uppercase");
}
您不必定义模式字符串作为一个单独的变量,但我倾向于认为它提高代码的可读性。
相关问题
- 1. 如何确定NSString是否为空
- 2. 确定字符串是否全部用正则表达式大写
- 3. 如何确定非英文字符串是否大写?
- 4. PHP - 全部大写?
- 5. 如何确定NSString是否基于拉丁文?
- 6. 如何检查一个单词在Ruby中是否全部大写?
- 7. PHP删除全部大写
- 8. PHP日志全部大写
- 9. 使textarea全部大写?
- 10. 如何确定一个组是否是安全组?
- 11. BOOST_FOREACH:是否有一种方法可以避免全部大写拼写?
- 12. 如何确定几何是否是多部分?
- 13. 确定NSString的第一个字符是否是一个数字
- 14. 确定NSString中的路径是否是目录或文件?
- 15. 如何确定文件系统是否在.net中区分大小写?
- 16. 检查一个字符串是否是Rails中的全部大写字段
- 17. 确定数组是否完全排序
- 18. 确定目录是否可写
- 19. KafkaStreams如何在引导时确定GlobalKTable是否完全填充?
- 20. 如何确定java中的字节数组是否全为零
- 21. 如何确定mysql索引是否完全适合内存
- 22. 如何通过JavaScript确定页面是否安全?
- 23. Kendo UI treelist和角 - 如何确定它是否完全加载?
- 24. 如何确定远程git仓库是否“安全”从
- 25. Scala-如何确定对象是否线程安全?
- 26. 如何确定WebView是否完全缩小
- 27. 区分大小写区分大小写还是全大写?
- 28. 如何测试是否存在外部常量NSString?
- 29. 如何确定shell脚本是安全
- 30. 如何确定System.Object是否是System.Type