0

NSRegularExpression でテストしたい NSString がありますが、期待どおりに動作せず、答えを探す場所がわかりません。

だからここに私のコードがあります:

    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

2つの円記号が必要です。

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

バックスラッシュ自体を文字列でエスケープする必要があるためです。

「文字のみ」をチェックするためのおそらくより簡単な解決策は

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

2 つのバックスラッシュが必要です。また、これをパターン ブラケットで囲む必要はありません。

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