Нужно регулярное выражение для этого (C #) - PullRequest
0 голосов
/ 09 января 2012

Обновлены ::

Надежность пароля:

Содержит символы из трех следующих четырех категорий:

  • Английские заглавные буквы (от A до Z)
  • Английские строчные буквы (от a до z)
  • Базовые 10 цифр (от 0 до 9)
  • Неалфавитные символы (например,!, $, #,%

Можно ли сравнить значение двух полей (введено) с регулярным выражением ... если да, то, пожалуйста, добавьте еще одно условие в приведенный выше список.

  • сравнить пароль с введенным именем пользователя, они должны отличаться

Ответы [ 2 ]

3 голосов
/ 09 января 2012

РЕДАКТИРОВАТЬ: Этот ответ был написан до того, как вопрос был отредактирован. Изначально в него входило требование не включать имя учетной записи пользователя и иметь длину не менее 8 символов.

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

// Categories is a list of regexes in this case. You could easily change
// it to anything else.
int categories = Categories.Count(regex => regex.IsMatch(password));
bool valid = password.IndexOf(name, StringComparison.OrdinalIgnoreCase) == -1
          && password.Length >= 8
          && categories >= 3;
1 голос
/ 09 января 2012

Если вам нужно сделать это в одном выражении, оно должно выглядеть примерно так:

^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])).{8,}$

См. здесь на Regexr

Позитивные указатели ((?=.*[a-z])) используются для проверки, содержит ли строка нужную вам группу символов.

Проблема в том, что вы хотите 3 из 4, что означает, что вы должны сделать чередование со всеми разрешенными комбинациями.

Последняя часть .{8,} затем сопоставляет строку и проверяет не менее 8 символов.

^ и $ - это привязки, которые привязывают шаблон к началу и концу строки.

[!%,.;:] - это класс символов, здесь вы можете добавить все символы, которые хотите включить. Может быть, проще использовать сценарий Unicode, например \p{P}, для всех знаков пунктуации. Для получения более подробной информации смотрите здесь регулярные-выражения.info

Обновление

сравнить пароль с введенным именем пользователя, они должны отличаться

обычно вы можете создавать регулярные выражения, используя конкатенацию строк. Я понятия не имею, как это в вашем случае, когда вы положили регулярное выражение ...

как-то так (псевдо)

String Username = "FooBar";
regex = "^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:]))(?i)(?!.*" + Username + ").+$";

Я также использовал здесь встроенный модификатор (?i), чтобы сопоставить его с независимым регистром. (?!.* - начало отрицательного взгляда, то есть строка не должна содержать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...