1

その中にパスワードを入力したいテキストフィールドがあります.強力なパスワードを入力したい. 提案をお願いします。

4

3 に答える 3

5

password.length

文字列の長さを求めることができます。それを希望する制限と比較してください。

- (BOOL)string:(NSString *)text matches:(NSString *)pattern
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];

    NSArray *matches = [regex matchesInString:text options:0 range:NSMakeRange(0, text.length)];

    return matches.count > 0;
}

文字列に正規表現を提供するメソッドがあります (これをカテゴリとして NSString に実装することもできます)。

最初のパラメーターはパスワード、2 番目のパラメーターはパターンです。

私は正規表現が得意ではないので、より良い解決策があるかもしれませんが、これが私のやり方です

NSString *password = @"iS_bhd97zAA!";
NSString *scPattern = @"[a-z]";
NSString *cPattern = @"[A-Z]";
NSString *sPattern = @"[!%&\._;,]";
NSString *nPattern = @"[0-9]";

if (8 <= password.length && password.length <= 15 &&
    [self string:password matches:scPattern] &&
    [self string:password matches:cPattern] &&
    [self string:password matches:sPattern] &&
    [self string:password matches:nPattern]) 
{
    NSLog(@"PW is valid");
}

ヒント

一部の文字をエスケープする必要があるため、特殊文字の正規表現は扱いにくいものです。私は正しいかもしれませんが、私は絶対に確信していません。

1つの正規表現だけでこれを行う可能性もありますが、これは恐ろしいものに見えます

これです

 (?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$

特殊文字以外はすべてあります。自分で追加したいかもしれません:D

于 2013-04-26T11:29:53.403 に答える