2011-12-07 6 views
8

C#でパスワードにX以上の大文字とY以上の数字が含まれていて、文字列全体がZより長いことを確認するにはどうすればよいですか?パスワードにXの大文字とYが含まれていることを確認するにはどうすればよいですか?

ありがとうございました。

+0

+1、便利な質問。 –

+0

私はいくつかの標準のpwd検証ルールをRegExで使用しますが、char解析ではcharではありません...この1つを参照してください:http://stackoverflow.com/questions/1152872/creating-a-regex-to-check-for-a -strong-password –

答えて

9

パスワード強度:

まず、私はパスワードの強度をよく読んで、ダブルチェックあなたが正しいことをやっていたことを確認するためにポリシーを(私はあなたを伝えることができなかった手)になります。

  • https://www.grc.com/haystack.htm
  • http://xkcd.com/936/ 01(が、良い食べ物の思考のためのジョーク)その後、私は仕事に取り掛かるだろう

    それから私は他の質問を確認したいです。

    実装:

    あなたはLINQのを使用することができます:

    return password.Length >= z 
        && password.Where(char.IsUpper).Count() >= x 
        && password.Where(char.IsDigit).Count() >= y 
        ; 
    

    また、(あなたが将来的にはより複雑な検証をプラグインできるようにするには良い選択肢かもしれません)、正規表現を使用することができます

    return password.Length >= z 
        && new Regex("[A-Z]").Matches(password).Count >= x 
        && new Regex("[0-9]").Matches(password).Count >= y 
        ; 
    

    または、それらを組み合わせて一致させることができます。

    あなたは、この複数回行う必要があった場合は、クラスを構築することにより、Regexインスタンスを再利用することができます:

    public class PasswordValidator 
    { 
        public bool IsValid(string password) 
        { 
         return password.Length > MinimumLength 
          && uppercaseCharacterMatcher.Matches(password).Count 
           >= FewestUppercaseCharactersAllowed 
          && digitsMatcher.Matches(password).Count >= FewestDigitsAllowed 
          ; 
        } 
    
        public int FewestUppercaseCharactersAllowed { get; set; } 
        public int FewestDigitsAllowed { get; set; } 
        public int MinimumLength { get; set; } 
    
        private Regex uppercaseCharacterMatcher = new Regex("[A-Z]"); 
        private Regex digitsMatcher = new Regex("[a-z]"); 
    } 
    
    var validator = new PasswordValidator() 
    { 
        FewestUppercaseCharactersAllowed = x, 
        FewestDigitsAllowed = y, 
        MinimumLength = z, 
    }; 
    
    return validator.IsValid(password); 
    
  • +1

    +1、1行の回答では、この数字をカウントするために提供されていません。 –

    +0

    @SaiKalyanAkshinthala:今修正されました。私は私の答えを拡大している間私の間違いを見た: –

    +0

    詳細な答えをありがとう! Where()メソッドの説明には非常に便利な – SexyMF

    6

    大文字と数字カウントする:

    string s = "some-password"; 
    int upcaseCount= 0; 
    int numbersCount= 0; 
    for (int i = 0; i < s.Length; i++) 
    { 
        if (char.IsUpper(s[i])) upcaseCount++; 
        if (char.IsDigit(s[i])) numbersCount++; 
    } 
    

    をし、長さ

    幸運のためs.Lengthをチェック!

    +1

    +1、シンプルだが完璧な答え。 –

    1

    ショートやLINQ Where() methodを使用してクリア:

    int requiredDigits = 5; 
    int requiredUppercase = 5; 
    string password = "SomE TrickY PassworD 12345"; 
    
    bool isValid = password.Where(Char.IsDigit).Count() >= requiredDigits 
           && 
           password.Where(Char.IsUpper).Count() >= requiredUppercase; 
    
    +0

    +1です。 –

    0

    これはそれを行う必要があります。

    public bool CheckPasswordStrength(string password, int x, int y, int z) 
    { 
        return password.Length >= z && 
          password.Count(c => c.IsUpper(c)) >= x && 
          password.Count(c => c.IsDigit(c)) >= y; 
    } 
    
    関連する問題