我有一个NSString我想用NSRegularExpression进行测试,但它没有像我期望的那样起作用,我不知道在哪里寻找答案。
所以这是我的代码:
BOOL companyNameContainsOnlyAuthorizedCharacters = YES;
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\P{Letter}]" options:0 error:&error];
NSArray *matches = [[NSArray alloc] init];
matches = [regex matchesInString:[model editorName] options:0 range:NSMakeRange(0,[[model editorName] length])];
if ([matches count] > 0) {
companyNameContainsOnlyAuthorizedCharacters = NO;
}
据我所知,[\ P {Letter}]应该匹配任何字母。尽管如此,它只是匹配字符“\”,“P”,“{”,“L”,“e”,“t”,“r”和“}”。我也试过没有括号[],但它根本不匹配任何东西。
任何帮助都会非常感谢,提前谢谢。
编辑: 此外,xcode给我一个警告,\ P是一个未知的转义序列......
答案 0 :(得分:1)
你需要两个反斜杠:
regularExpressionWithPattern:@"[\\P{Letter}]"
因为反斜杠本身需要在字符串中进行转义。
检查“仅限字母”的一个更简单的解决方案是
NSString *stringToTest = ...;
NSCharacterSet *letterCharset = [NSCharacterSet letterCharacterSet];
BOOL lettersOnly = [[stringToTest stringByTrimmingCharactersInSet:letterCharset] length] == 0;
答案 1 :(得分:0)
你需要两个反斜杠。此外,您无需将其括在模式括号中。
regularExpressionWithPattern:@"\\P{Letter}"