saimanisha Ответов: 1

Как лучше всего написать код для проверки пароля в C#winforms


приведенный ниже код не работает .whzat правильный регулярный EXP для данной проверки
-по крайней мере один заглавный
- один специальный символ
-длина составляет 8.

Что я уже пробовал:

<pre>  private void textBox1_TextChanged(object sender, EventArgs e)
        {

            if (string.IsNullOrEmpty(textBox1.Text))
            {
                
                errorProvider1.SetError(textBox1, "Password required!");
            }
            else if (!Regex.IsMatch(textBox1.Text, "^.*(?=.{10,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$"))
            {
                errorProvider1.SetError(textBox1, "password must upeercase and lower case letters with maximum limit 6");
            }
            else
            {
                errorProvider1.SetError(textBox1, null);
            }
        }

LLLLGGGG

http://regexlib.com/REDetails.aspx?regexp_id=1111

1 Ответов

Рейтинг:
0

OriginalGriff

Не используйте регулярное выражение, чтобы сделать все это - они слишком сложны, чтобы поддерживать их при изменении правил пароля.
Вместо этого сделайте это в коде C# :

private string SpecialsAllowed = "!£$%^&*()_-=+.,";
public bool IsValidPassword(string pw)
    {
    if (string.IsNullOrWhiteSpace(pw)) return false;
    pw = pw.Trim();
    if (pw.Length < 8) return false;
    if (!pw.Any(c => char.IsUpper(c))) return false;
    if (!pw.Any(c => char.IsLower(c))) return false;
    if (pw.Intersect(SpecialsAllowed).Count() == 0) return false;
    return true;
    }
Это намного яснее и намного проще изменить, когда правила меняются.

[править]союз изменил пересекаются :МЗ:[/правка]


nv3

Разве ты не имел в виду ПУ?Пересекаются вместо PW. Union? За исключением этого, я полностью поддерживаю вашу точку зрения.

OriginalGriff

Кофе... Мне нужно еще кофе ...

Исправлено. :румянец: