2013-03-15 27 views
0

我有一个NSString我想用NSRegularExpression进行测试,但它不会像我期望的那样执行任何操作,而且我也不知道在哪里搜索答案。“ P {Letter}”和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 {}信]应匹配什么,但信件。尽管如此,它只是匹配字符“\”,“P”,“{”,“L”,“e”,“t”,“r”和“}”。我也尝试了没有括号[],但它根本不匹配任何东西。

任何帮助将不胜感激,提前谢谢。

编辑: 此外,Xcode中给了我一个警告\ P是一个未知的转义序列...

+0

你想要什么? – Balu 2013-03-15 10:24:43

+0

我想知道我做错了什么。 – user2006934 2013-03-15 10:25:45

+0

你想给A到Z的字母吧? – Balu 2013-03-15 10:29:24

回答

0

您需要两个反斜杠:

regularExpressionWithPattern:@"[\\P{Letter}]" 

因为反斜杠本身需要进行转义一个字符串。

一个可能被简单的解决方案,以检查“字母只有”是

NSString *stringToTest = ...; 
NSCharacterSet *letterCharset = [NSCharacterSet letterCharacterSet]; 
BOOL lettersOnly = [[stringToTest stringByTrimmingCharactersInSet:letterCharset] length] == 0; 
+0

好的,这个工程。非常感谢你:) – user2006934 2013-03-15 10:39:42

+0

@ user2006934:不客气。我已经为答案添加了一个替代解决方案,可能它很有用。 – 2013-03-15 10:56:58

0

你需要两个反斜杠。另外,您不需要将其放在模式括号中。

regularExpressionWithPattern:@"\\P{Letter}" 
+0

谢谢。有用 :) – user2006934 2013-03-15 10:40:20