4

PHPでは、次のコードを使用しています...

$passwordCapitalLettersLength = strlen(preg_replace("![^A-Z]+!", "", $password));
$passwordNumbersLength = strlen(preg_replace("/[0-9]/", "", $password));

...パスワードに大文字と数字が表示される回数をカウントします。

Objective Cでこれに相当するものは何ですか?

4

2 に答える 2

7

あなたは使用することができますNSCharacterSet

NSString *password = @"aas2dASDasd1asdASDasdas32D";
int occurrenceCapital = 0;  
int occurenceNumbers = 0;
for (int i = 0; i < [password length]; i++) {
    if([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[password characterAtIndex:i]])
       occurenceCapital++;

    if([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[password characterAtIndex:i]])
       occurenceNumbers++;

}
于 2012-11-21T15:57:52.613 に答える
1

これは、手動で繰り返す必要がなく、NSStringとの機能を使用してかなり簡潔に行うことができます。NSCharacterSet

componentsSeparatedByCharactersInSet:常に少なくとも1つの要素を返すため、1のデクリメントが必要であり、その1つの要素は分離をカウントしません。

NSString* password = @"dhdjGHSJD7d56dhHDHa7d5bw3/%£hDJ7hdjs464525";

NSArray* capitalArr = [password componentsSeparatedByCharactersInSet:[NSCharacterSet uppercaseLetterCharacterSet]];
NSLog(@"Number of capital letters: %ld", (unsigned long) capitalArr.count - 1);

NSArray* numericArr = [password componentsSeparatedByCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];
NSLog(@"Number of numeric digits: %ld", (unsigned long) numericArr.count - 1);

元の回答:提供したコードはすべてのベースを網羅しているわけではありませんが、安全性やリスクの理由からこれらの正規表現を使い続ける必要がある場合は、以下で行うことができます。

正規表現はObjective-Cで使用できます。文字列を手動で繰り返すことを保存し、コードを簡潔に保ちます。また、手動で反復していないため、コンパイラ/フレームワークライターに最適化させることができるため、パフォーマンスが向上する可能性があることも意味します。

// Testing string
NSString* password = @"dhdjGHSJD7d56dhHDHa7d5bw3/%£hDJ7hdjs464525";

NSRegularExpression* capitalRegex = [NSRegularExpression regularExpressionWithPattern:@"[A-Z]"
                                                                              options:0
                                                                                error:nil];
NSRegularExpression* numbersRegex = [NSRegularExpression regularExpressionWithPattern:@"[0-9]"
                                                                              options:0
                                                                                error:nil];

NSLog(@"Number of capital letters: %ld", (unsigned long)[capitalRegex matchesInString:password
                                                                              options:0
                                                                                range:NSMakeRange(0, password.length)].count);
NSLog(@"Number of numeric digits: %ld", (unsigned long)[numbersRegex matchesInString:password
                                                                             options:0
                                                                               range:NSMakeRange(0, password.length)].count);
于 2012-11-21T16:09:01.443 に答える