2016-03-21 9 views
0

は、私はこれらの規則でパスワードを検証する必要があります。 大文字、小文字、数字や記号:正規表現の使用してパスワードの検証や

パスワードは6-12文字 と、次の少なくとも二つを持っている必要があります。私は「少なくとも」の条件を作成する方法については苦労しています

^((?=.*[a-z])|(?=.*[A-Z])|(?=.*\\d)|(?=.*(_|[[email protected]#$%^&*.,?]))).{6,12} 

: 以下は私の現在の正規表現です。

+1

で試すことができます。お互いの後に複数の無駄な前提条件式を積み重ねることで、あなたは*できるかもしれません。 –

+1

@ LasseV.Karlsen:それほど難しくありません。ちょうど非常に扱いにくいです。ただし、* 6-12文字**以上***は不自然です。 –

+0

私は孤立正規表現のためのカップルのためのこれらの要件を分割します。各条件を孤立してテストし、2つ以上が満たされない場合はエラーを表示します。 – PatNowak

答えて

0

要件を1つずつ確認し、カウンターを1つ増やして実際に満たされている数を確認する機能を定義することができます。複数の文字列が一致し、文字列の長さが6〜12の場合、パスワードは合格します。

NSUInteger checkPassword(NSString * haystack) { 
    NSArray * arr = [NSArray arrayWithObjects: @"(?s).*\\d.*", @"(?s).*[a-z].*", @"(?s).*[A-Z].*", @"(?s).*[[email protected]#$%^&*.,?].*",nil]; 
    NSUInteger cnt = 0; 
    for (NSUInteger index = 0; index < [arr count]; ++index) { 
     NSPredicate * passTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", [arr objectAtIndex:index]]; 
     if ([passTest evaluateWithObject:haystack]) { 
      cnt = cnt + 1; 
     } 
    } 
    if (cnt > 1 && [haystack length] > 5 && [haystack length] < 13) 
    { 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 
} 

とサンプルIDEONE demo:このための単一のパターンを書き込むことが可能ですが、すべての可能なペアを定義する必要があるとして、それはかなり長く、不器用になること

NSString * s = @"123DF4ffg"; 
NSLog(@"Result: %d", checkPassword(s)); 
// => Result: 1 

注意ルックアヘッドの選択肢の

0

あなたはそれだけで正規表現でこれを行うのは非常に難しいことになるだろう、この

^(?:(?=.*[a-z])(?:(?=.*[A-Z])(?=.*[\\d\\w])|(?=.*\\w)(?=.*\\d))|(?=.*\\w)(?=.*[A-Z])(?=.*\\d)).{6,12}$; 
関連する問題