0

我有一个 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 是一个未知的转义序列......

4

2 回答 2

1

你需要两个反斜杠:

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

因为反斜杠本身需要在字符串中转义。

检查“仅字母”的一个可能更简单的解决方案是

NSString *stringToTest = ...;
NSCharacterSet *letterCharset = [NSCharacterSet letterCharacterSet];
BOOL lettersOnly = [[stringToTest stringByTrimmingCharactersInSet:letterCharset] length] == 0;
于 2013-03-15T10:29:51.960 回答
0

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

regularExpressionWithPattern:@"\\P{Letter}"
于 2013-03-15T10:35:41.747 回答