如何检查一个字符串是否包含英文字母(A-Z)?

问题描述:

如何检查一个字符串是否包含Objective-C中的英文字母(A到Z)? 在PHP中,有一个preg_match方法。如何检查一个字符串是否包含英文字母(A-Z)?

+2

*包含*或*仅包含*? – 2011-08-20 02:32:09

一种方法是使用正则表达式 - NSRegularExpression类。以下说明如何检测任何英文字母,但只有在整个字符串由这些字母组成的情况下,才能修改该模式以匹配。像^[a-zA-Z]*$

NSRegularExpression *regex = [[[NSRegularExpression alloc] 
    initWithPattern:@"[a-zA-Z]" options:0 error:NULL] autorelease]; 

// Assuming you have some NSString `myString`. 
NSUInteger matches = [regex numberOfMatchesInString:myString options:0 
    range:NSMakeRange(0, [myString length])]; 

if (matches > 0) { 
    // `myString` contains at least one English letter. 
} 

或者,您可以构建一个包含NSCharacterSet你感兴趣的人物和使用NSStringrangeOfCharacterFromSet:找到任何一个第一次出现。我应该注意到,这种方法只能找到字符串中的第一个这样的字符。也许不是你想要的。

最后,我觉得你可以用编码做一些事情,但没有给出这么多想法。也许可以确定字符串是否可以用ASCII表示(使用canBeConvertedToEncoding:)然后检查数字/符号?

哦,你总是可以遍历字符串并检查每个字符! :)

可以使用NSRegularExpression类(苹果对类文档可以被看作here

你也可以使用NSCharacterSet并使用rangeOfCharacterFromSet:方法,看看如果返回NSRange是字符串的整个范围。 characterSetWithRange将是一个开始创建characterSet的好地方。

您可以使用简单的NSPredicate测试。

NSString *str = @"APPLE"; 
NSString *regex = @"[A-Z]+"; 
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 
BOOL result = [test evaluateWithObject:str];